JSF javax.faces.convert转换器getAsString对象null

时间:2013-09-30 07:02:08

标签: jsf jsf-2 null converter

我正在处理一个应用程序而且我在这个应用程序中使用了JSF,我编写了一个实现此接口JSF javax.faces.convert的Java类,并且还覆盖了Converter的方法getAsString,这里是Java这种方法的文件:

java.lang.String getAsString(FacesContext context,
                             UIComponent component,
                             java.lang.Object value)

但有时候,这里的值是Null,有时效果很好,

有人知道为什么这个值在这里为空?如何防止它发生?

2 个答案:

答案 0 :(得分:3)

如果模型值为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()将使用“{select} ...”项目的null值进行调用。

如果您正面临NullPointerException,那么它实际上是您自己的转换器实施中的错误。您无法阻止提供的value成为null。更重要的是,javadoc which you apparently already found yourself还明确告诉模型对象值可能为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);
    }
}

答案 1 :(得分:-1)

看看converter

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());
  }