h:selectOneRadio传递空字符而不是空值

时间:2015-12-29 19:30:04

标签: jsf jsf-2 selectoneradio null-check null-character

在我的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)...
    }

}

我期望的行为是:

  1. 页面加载。单选按钮未定义为初始值,因此既不选择是也不选择。但是,由于required =“true”,如果用户将其留空(并且确实如此),则会收到验证错误。
  2. 第一次加载页面时,#{pagecode.showForm(attendingRadio.value)}被调用,我希望传递一个null对象,showForm将返回false。
  3. 在做了一些故障排除之后,我确定实际发生的是,而不是传递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>
    

1 个答案:

答案 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" />