【发布时间】:2015-12-29 19:30:03
【问题描述】:
在我的 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)...
}
}
我期望的行为是:
- 页面加载。单选按钮未定义为初始值,因此既未选择 Yes 也未选择 No。但是,由于 required="true",如果用户将其留空(确实如此),用户将收到验证错误。
- 第一次加载页面时,调用#{pagecode.showForm(attendingRadio.value)},我希望传递一个空对象,而showForm 将返回false。
在进行了一些故障排除后,我确定实际发生的情况是,不是传递空对象,即等效为 showForm(null),而是得到等效于 showForm(new Character('\u0000'));而是将 Unicode 字符传递给 null。
当我的 h:selectOneRadio 没有选择值时,有没有办法让 JSF 传递 Java 空对象而不是空字符?我在 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>
【问题讨论】:
标签: jsf jsf-2 selectoneradio null-check null-character