[英]JSF AJAX validation: execute=“@this” render=“@form” inconsistent depending on prior requests
我有一个h:commandLink
,它调用一种方法来更改绑定到单选输入的属性。
我也以相同的形式在文本输入上进行了验证(required = true)。
如果我将文本输入留空,然后单击h:commandLink
并带有execute="@this
,则单选按钮将按预期从model属性更新,因为文本输入从未处理过,验证也不会触发。
但是,如果首先单击具有execute="@form"
的其他h:commandLink
, 然后单击具有execute="@this"
的链接,则验证消息将消失,但是即使该单选按钮值也不会从模型中更新单选按钮的UIInput永远不会处于无效状态。
当我使用@this
意图是迫使所有内容从模型中更新并忽略组件中的所有提交值时, execute="@this"
行为取决于我之前所做的事情,这让我很烦。
我怀疑正在发生的事情是这样的:
@form
,单选按钮和文本都将被处理。 localValue
localValue
保持设置状态,不会被清除或传播为value
resetValue()
或重新处理有问题的组件(例如, execute="@this radio"
)以清除localValue
,然后允许从bean刷新。 我的问题是:
感觉这可能只是这个问题的另一个例子
发生验证错误后,如何使用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应该重置输入组件的值。
我只记得我是否曾经根据JSF规范进行过报告。 编辑:我报告了它: JSF规范发行1060 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.