<h:selectoneradio>值未在bean中更新</h:selectoneradio>

时间:2012-11-28 03:11:55

标签: jsf

<h:form>
    <h:messages />
        <h:selectOneRadio value="#{bean.selectedValue}" id="selectId"
            layout="pageDirection">
            <f:selectItems value="#{bean.values}" var="value"
                itemLabel="#{value.text}" itemValue="{value}" />
        </h:selectOneRadio>
        <h:commandButton value="Press Me" >
            <f:ajax listener="#{bean.btn_action}" execute="@form"/>
        </h:commandButton>
</h:form>

以下是代码详情。

  • Bean是@ViewScope中的支持bean。
  • bean.values是@RequestScope中的另一个托管bean的列表。
  • 单选按钮值绑定到支持bean中的@RequestScope托管bean之上。 #{bean.selectedValue}
  • selectedValue是对具有getter / setter的支持bean中对象的引用。

问题。   - 当execute = @ form被添加到ajax标记时,甚至不调用监听器。   - 在execute- @ form之后,监听器被称为但是在辅助bean中没有更新单选按钮选择值。   - 当我调试getter时总是为selectedValue调用,而不是setter。

任何帮助将不胜感激。 感谢。

1 个答案:

答案 0 :(得分:3)

假设itemValue="{value}"只是一个粗略的拼写错误并且您从未关注过服务器日志,那么如果#{value}表示非标准类型并且您没有,则此构造将无声地失败该类型的Converter或未正确实施类型的equals()方法。

第一步是将render="@form"添加到<f:ajax>,以便<h:messages>也得到更新,这样您就不需要查看服务器日志中的转换/验证错误。

<f:ajax execute="@form" listener="#{bean.btn_action}" render="@form" />

第二步是根据显示的转换/验证错误修复问题。很可能你有一个转换错误“null converter”或者你已经有了一个,但是你得到的验证错误“值无效”

以下答案中都详细解答了两个潜在问题: