0

我无法弄清楚为什么 EJB 会话 bean 不工作。实际的错误消息是 EJBException:NameNotFoundException,但这不是一个很有启发性的消息。

我已经将其追溯到导致问题的确切原因,但还没有弄清楚原因。所以,我想创建一个会话 bean 来跟踪表单的输入值。

精简版的代码是:

public class rrpInputField {
   public boolean isRequired;
   public int maxLength;
   public String inputValue;
   public String displayValue;
   public String formatMask;
   public rrpInputField() {
     isRequired = false;
     maxLength  = 64;
     inputValue = "";
     displayValue = "";
     formatMask   = "";
  }
}

然后我创建了一个界面 dohicky...

@Local
public interface Test1  {
   public void   setAction(String action);
   public String getAction();
   public void   setName(String name);
   public String getName();
}

然后我创建了测试bean本身......

@Stateful
public class Test1Bean implements Test1 {
   private String         action;
   private rrpInputField  name;

   @PostConstruct
   public void initialize() {
        action = "initalValue";
        //name.currentValue = "TestValue";

    @Override
    public void setAction(String action){ this.action = action; }

    @Override
    public void getAction() { return this.action; }

    @Override
    public void setName(String name) { this.name.currentValue = name; }

    @Override
    public String getName() { return this.name.currentValue; }

}

在我的测试 servlet 中,我有

 @EJB
 private  Test1   t1;

如果我在 bean 定义中取消注释 bean 初始化方法中的一行,我会失败。所以我知道这与此有关。//name.currentValue = "TestValue";

如果我把它注释掉,只要我在 servlet 中编码 t1.getName("New Value") 我就会得到同样的错误。

如果我把它注释掉,那么 bean 会按预期工作 - 我可以初始化,并使用 setAction 和 getAction 就好了。

我相当确定 rrpInput 类是正确的,因为我可以在 servlet 中编写代码:

   rrpInputField f1 = new rrpInputField();
   f1.currentValue  = "TestValue";

我认为它一定与我的输入字段类有关,但我没有运气弄清楚是什么。

4

1 回答 1

0

我真的不明白为什么,但我通过在 Table1Bean 的初始化方法中添加一个“新”东西来让它工作。

@PostConstruct    
public void initialize() {
   action = "initialValue";
   name = new rrpInputField();
   name.currentVAlue = "TestValue;
}

如果有人能解释为什么我必须这样做,那将很有启发性。

于 2016-07-02T18:50:42.350 回答