h:selectOneRadio 正在传递空字符而不是空值
h:selectOneRadio is passing null character instead of null value
在我的 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 会 return false .
在进行了一些故障排除后,我确定实际发生的是传递的不是空对象,即等效的 showForm(null)
,而是我得到的是等效的 showForm(new Character('\u0000'))
;它传递空值的 Unicode 字符。
当我的 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>
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" />
在我的 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 会 return false .
在进行了一些故障排除后,我确定实际发生的是传递的不是空对象,即等效的 showForm(null)
,而是我得到的是等效的 showForm(new Character('\u0000'))
;它传递空值的 Unicode 字符。
当我的 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>
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" />