小编Cha*_*ncy的帖子

h:selectOneRadio映射到布尔值,将nulls转换为false

我有一个h:selectOneRadio组件,我已映射到Boolean支持bean中的(不是布尔值).加载时,单选按钮没有默认选择选项,单选按钮不是必填字段.

示例代码:

JSF页面摘录:

<h:form>
<h:selectOneRadio value="#{pagecode.test}">
    <f:selectItem itemValue="#{true}" itemLabel="Yes"/>
    <f:selectItem itemValue="#{false}" itemLabel="No"/>
</h:selectOneRadio>
<h:commandButton value="Save" action="#{pagecode.save}"/>
</h:form> 
Run Code Online (Sandbox Code Playgroud)

支持Java页面代码:

package pagecode;

public class JSFBooleanTestView extends PageCodeBase {

    protected Boolean test;

    public Boolean getTest() {
        return test;
    }

    public void setTest(Boolean test) {
        this.test = test;
    } 

    public String save() {
        return "JSFBooleanTestView";
    }
}
Run Code Online (Sandbox Code Playgroud)

faces-config.xml摘录:

<managed-bean>
    <managed-bean-name>pagecode</managed-bean-name>
    <managed-bean-class>pagecode.JSFBooleanTestView</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
</managed-bean>
Run Code Online (Sandbox Code Playgroud)

由于test没有默认值,单选按钮开始未选中.由于不需要该字段,我的期望是在没有选中单选按钮的情况下按下"保存"按钮会导致测试为空.相反,测试被指定为false.

我尝试过的不同选项没有效果:

  1. 设置 h:selectOneRadio required="false"

  2. 添加到web.xml:

    <context-param>
         <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
         <param-value>true</param-value>
     </context-param>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 添加到web.xml:

     <context-param>
         <param-name>org.apache.el.parser.COERCE_TO_ZERO</param-name>
         <param-value>false</param-value>
     </context-param> …
    Run Code Online (Sandbox Code Playgroud)

null jsf boolean jsf-2 selectoneradio

1
推荐指数
1
解决办法
3651
查看次数

标签 统计

boolean ×1

jsf ×1

jsf-2 ×1

null ×1

selectoneradio ×1