我最近一直在开发一些 JSF 应用程序,并且对 Web 组件 API 的不一致感到不安。
我注意到在服务器端代码中的 JSF 组件对象上调用 .getValue() 或 .getSubmittedValue() 时会出现极其不可预测的行为。有时,当我在下拉列表框上调用 .getValue() 时,我注意到我得到的值是在我选择我的值之前的值(所以来自最后一页刷新的值),其中 .getSubmittedValue() 得到我是正确的值,例如:
UIInput name = new UIInput(); // This is the control I have in a bean.
public void submit(ActionEvent ae)
{
someMethod(name.getValue().toString()); // Retrieves the "old" value
someMethod(name.getSubmittedValue().toString()); // Retrieves the correct value
}
另外,我注意到在表单字段上调用 .getSubmittedValue() 有时会导致空指针异常,因为该值尚未在组件对象中实例化,在这种情况下,当我在这种情况下调用 .getValue() 时,我得到正确的值,例如:
HtmlInputText name = new HtmlInputText(); // This is the control I have in a bean.
public void submit(ActionEvent ae)
{
someMethod(name.getValue().toString()); // Retrieves the correct value
someMethod(name.getSubmittedValue().toString()); // Throws NullPointerException
}
这只是 JSF 框架的“怪癖”,还是我完全错误地使用了API?对这两种方法的任何见解将不胜感激。干杯。