[英]JSF javax.faces.convert Converter getAsString Object null
我正在研究一個應用程序,我在這個應用程序中使用了JSF,我編寫了一個Java類來實現這個接口JSF javax.faces.convert
,並且還覆蓋了Converter的getAsString
方法,這里是這個方法的Java文檔:
java.lang.String getAsString(FacesContext context,
UIComponent component,
java.lang.Object value)
但有時候,這里的值是Null
,有時效果很好,
有誰知道為什么這個值在這里為空? 如何防止它發生?
如果模型值為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" />
然后將使用null
值調用getAsString()
。
另外,如果您使用例如,
<h:selectOneMenu ... converter="someConverter">
<f:selectItem itemValue="#{null}" itemLabel="Please select ..." />
<f:selectItems value="#{data.availableItems}" />
</h:selectOneMenu>
然后,對於“請選擇...”項,將使用null
值調用getAsString()
。
如果您正面臨NullPointerException
,那么它實際上是您自己的轉換器實現中的錯誤。 您無法阻止提供的value
null
。 更重要的是,您顯然已經發現的javadoc也明確告訴模型對象值可能為null。
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);
}
}
看看轉換器
public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object o)
{
if (o == null)
{
return "";
}
Value p = (Value) o;
if (p.getId() != null)
{
return p.getId().toString();
}
return (p.toString());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.