如果null
模型值为null
. 例如,
public class SomeBean {
private SomeObject someObject;
// Let's assume, someObject is never initialized and defaults to null.
}
如果你使用
<h:outputText value="#{someBean.someObject}" converter="someConverter" />
然后getAsString()
将使用null
值调用。
此外,如果您使用例如,
<h:selectOneMenu ... converter="someConverter">
<f:selectItem itemValue="#{null}" itemLabel="Please select ..." />
<f:selectItems value="#{data.availableItems}" />
</h:selectOneMenu>
然后getAsString()
将使用null
“请选择...”项的值调用。
如果您面临NullPointerException
,那么它实际上是您自己的转换器实现中的一个错误。您不能阻止提供value
的null
. 更重要的是,您显然已经找到了自己的 javadoc,还明确指出模型对象值可能为空。
value
- 要转换的模型对象值(可能是null
)
你应该自己检查一下。User
下面是一个典型的例子,一个虚拟实体的转换器应该是什么样子的:
@Override
public Object getAsObject(FacesContext context, UIComponent component, String submittedValue) {
if (submittedValue == null || submittedValue.isEmpty()) {
return null;
}
try {
return userService.find(Long.valueOf(submittedValue));
} catch (NumberFormatException e) {
throw new ConverterException(new FacesMessage(String.format("%s is not a valid User ID", submittedValue)), e);
}
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object modelValue) {
if (modelValue == null) {
return "";
}
if (modelValue instanceof User) {
return String.valueOf(((User) modelValue).getId());
} else {
throw new ConverterException(new FacesMessage(String.format("%s is not a valid User", modelValue)), e);
}
}