我无法弄清楚为什么 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";
我认为它一定与我的输入字段类有关,但我没有运气弄清楚是什么。