【发布时间】:2011-08-27 09:12:55
【问题描述】:
我在使用 selectOneRadio 组件时遇到了问题。我在转换器的 getAsString 中得到 NullPointerException。在我看到那个组件之前,这个异常就被抛出了。
看起来是这样的:
<h:selectOneRadio id="bookA"
value="#{bookHandler.compareBookA}">
<f:converter converterId="bookConverter" />
<f:selectItems value="#{bookHandler.selectedBooks}"
var="book" itemLabel="#{book.shortname}" itemValue="#{book}" />
</h:selectOneRadio>
属性 compareBookA 是 Book 类型的对象。
这是抛出 NPE 的方法:
@Override
public String getAsString(FacesContext fc, UIComponent uic, Object value)
throws ConverterException {
Book book = (Book) value;
if (book == null ) {
throw new ConverterException("NPE...");
}
return book.getShortname();
}
我也覆盖了 toString()。
由于某种原因,如果我将组件更改为 selectManyCheckbox(并保持其余部分不变),则会呈现组件。
我在 Tomcat 上使用 JSF 2(MyFaces 实现)和 Tomahawk。
额外问题:为什么我首先需要转换器?如果我离开转换器,组件会被渲染,但我想将选择的书传递给某个操作方法,那么它就不是书了。
有什么想法吗? 谢谢!
【问题讨论】: