我有一个h:commandLink调用方法,该方法更改绑定到单选输入的属性。
h:commandLink
我也有相同验证的表单上的文本输入(required = true)。
如果我离开了文本输入栏,并点击h:commandLink同execute="@this,从模型属性如预期,因为文字输入从未处理和验证从来没有火灾的单选按钮更新。
execute="@this
但是,如果在一个不同的我首先点击h:commandLink与execute="@form", 然后 与链接execute="@this",确认消息消失,但单选按钮值也 不会 离即使UIInput单选按钮从未处于无效状态的模型更新。
execute="@form"
execute="@this"
我发现这很烦人execute="@this",因为我的意图@this是迫使所有内容从模型中更新而忽略组件中的所有提交值,因此行为取决于我之前所做的事情,这很令人讨厌。
@this
我怀疑正在发生的事情是这样的:
@form
localValue
value
resetValue()
execute="@this radio"
我的问题是:
感觉这可能只是这个问题的另一个例子
发生验证错误后,如何使用PrimeFaces AJAX填充文本字段?
不幸的是,我觉得最近发现了很多。:-(
下面的代码示例:
<h:form> <h:messages/> Radio = <h:selectOneRadio value="#{testBean.radioValue}" id="radio" binding="#{radio}"> <f:selectItem itemValue="foo" itemLabel="Foo"/> <f:selectItem itemValue="bar" itemLabel="Bar"/> </h:selectOneRadio> <br></br> radio bean value = <h:outputText value="#{testBean.radioValue}"/> <br></br> radio UIInput localValue = <h:outputText value="#{radio.localValue}"/> <br></br> radio UIInput value = <h:outputText value="#{radio.value}"/> <br></br> String w/validation = <h:inputText value="#{testBean.stringValue}" required="true" /> <br></br> <ul> <li> <h:commandLink actionListener="#{testBean.changeRadioValue}" value="execute = @form"> <f:ajax render="@form" execute="@form"/> </h:commandLink> </li> <li> <h:commandLink actionListener="#{testBean.changeRadioValue}" value="execute = @this"> <f:ajax render="@form" execute="@this"/> </h:commandLink> </li> <li> <h:commandLink actionListener="#{testBean.changeRadioValue}" value="execute = @this radio"> <f:ajax render="@form" execute="@this radio"/> </h:commandLink> </li> </ul> </h:form>
而这个豆:
@ManagedBean @ViewScoped public class TestBean { private String radioValue = "foo"; private String stringValue; public void changeRadioValue() { radioValue = "bar"; } // + getters/setters }
我对生命周期的理解正确吗?
是。
我是在做错什么,还是关于JSF的烦人的设计之一?
这是JSF的“烦人的设计问题”之一。如我在有关该问题的答复中所述:
回到具体问题,我想这是对JSF2规范的疏忽。当JSF规范强制执行以下命令时,对我们JSF开发人员而言将更加有意义: 当JSF需要通过ajax请求更新/重新呈现输入组件,并且该输入组件不包含在ajax请求的处理/执行中时,则JSF应该重置输入组件的值。
回到具体问题,我想这是对JSF2规范的疏忽。当JSF规范强制执行以下命令时,对我们JSF开发人员而言将更加有意义:
我只记得我是否曾经根据JSF规范进行过报告。编辑:我报告了它:JSF规范发行1060。