在我的JSF页面代码中,我有类似于以下内容的内容:
<h:selectOneRadio value="#{pagecode.attending}" required="true" id="attendingRadio" binding="#{attendingRadio}">
<f:selectItem itemValue="Y" itemLabel="Yes"/>
<f:selectItem itemValue="N" itemLabel="No"/>
<f:ajax event="click" render="attendingDetails" execute="attendingRadio"/>
</h:selectOneRadio>
<h:panelGroup id="attendingDetails">
<h:panelGroup rendered="#{pagecode.showForm(attendingRadio.value)}">
...
</h:panelGroup>
</h:panelGroup>
在我的页面代码支持bean中,我有以下内容:
public class Pagecode {
protected Character attending;
public Character getAttending() {
return attending;
}
public void setAttending(Character attending) {
this.attending=attending;
}
public boolean showForm(Character c) {
if (c==null) {
return false;
}
(other stuff)...
}
}
我期望的行为是:
在做了一些故障排除之后,我确定实际发生的是,而不是传递null对象,即等效showForm(null)
,而是相当于showForm(new Character('\u0000'))
;它将Unicode字符传递给null。
当我的h:selectOneRadio没有选择值时,有没有办法让JSF传递Java null对象而不是null字符?我在WebSphere Portal 8.0上使用Apache MyFaces JSF 2.0。
作为旁注,我确实尝试将以下内容添加到我的web.xml中,但遗憾的是没有帮助:
<context-param>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
</context-param>
答案 0 :(得分:1)
Character
/ char
只是您要表示的值的错误数据类型。
改为使用enum
。
public enum Choice {
Y, N;
}
private Choice attending;
或者,可能更好,Boolean
。
private Boolean attending;
<f:selectItem itemValue="true" itemLabel="Yes" />
<f:selectItem itemValue="false" itemLabel="No" />