<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>
以下是代码详情。
问题。 - 当execute = @ form被添加到ajax标记时,甚至不调用监听器。 - 在execute- @ form之后,监听器被称为但是在辅助bean中没有更新单选按钮选择值。 - 当我调试getter时总是为selectedValue调用,而不是setter。
任何帮助将不胜感激。 感谢。
答案 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”或者你已经有了一个,但是你得到的验证错误“值无效”。
以下答案中都详细解答了两个潜在问题: