0

我正在开发一个应用程序,我在这个应用程序中使用了 JSF,我编写了一个实现这个接口 JSF 的 Java 类javax.faces.convert,并且还覆盖了getAsStringConverter 的方法,这里是这个方法的 Java doc:

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

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

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

4

2 回答 2

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()将使用null“请选择...”项的值调用。

如果您面临NullPointerException,那么它实际上是您自己的转换器实现中的一个错误。您不能阻止提供valuenull. 更重要的是,您显然已经找到了自己的 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);
    }
}
于 2013-09-30T11:34:41.153 回答
-1

看看转换器

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());
  }
于 2013-09-30T08:18:18.717 回答