簡體   English   中英

JSF javax.faces.convert轉換器getAsString對象null

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM