gpt4 book ai didi

jsf - Richfaces 和 JSF/AJAX 生命周期

转载 作者:行者123 更新时间:2023-12-04 21:00:20 27 4
gpt4 key购买 nike

我已经设法让代码按照我的意图运行,但我不明白为什么这会起作用的一个特定方面。我用 Richfaces 3.3.3 运行 Seam 2.2.2。

这是来自 xhtml 页面的代码:

...
<h:form id="radiobuttontestform">

<fieldset>
<h:panelGrid columns="3">

<h:selectOneRadio layout="pageDirection" id="myRadio" value="#{actionBean.myRadioButton}">
<f:selectItem itemLabel="First" itemValue="0" />
<f:selectItem itemLabel="Second" itemValue="1" />
<a4j:support event="onclick" ajaxSingle="true" process="myDropdown" reRender="myDropdown,myCount,test" />
</h:selectOneRadio>
<h:panelGrid columns="1" border="0">
<h:selectOneListbox size="1" id="myDropdown" value="#{actionBean.rowCountPredefined}" disabled="#{actionBean.myRadioButton != '0'}">
<f:selectItem itemLabel="10" itemValue="10" />
<f:selectItem itemLabel="20" itemValue="20" />
<f:selectItem itemLabel="30" itemValue="30" />
</h:selectOneListbox>

<h:inputText id="myCount" maxlength="5" value="#{actionBean.rowCountSpecified}" disabled="#{actionBean.myRadioButton != '1'}" required="true">
<f:validateLongRange minimum="1" maximum="1000" />
<rich:ajaxValidator event="onkeyup" for="myCount" />
</h:inputText>
<rich:message id="errorMessage" for="myCount" ajaxRendered="true" showDetail="false" showSummary="true">
<f:facet name="errorMarker">ERROR:</f:facet>
</rich:message>
</h:panelGrid>

</h:panelGrid>
</fieldset>
<h:outputLabel id="test" value="RadioValue: #{actionBean.myRadioButton}" />

<a4j:commandButton id="show" value="Show Values in Log" action="#{actionBean.showValues}" />
<a4j:commandButton id="done" value="Save and end conversation" action="#{actionBean.apply}" />
</h:form>
...

backing bean 只是一个简单的 POJO,其中包含三个属性的 getter 和 setter。 (myRadioButton, rowCountPredefined, rowCountSpecified)

这是我得到的:(正确的结果)

radio button example http://katzekat.de/Bilder/radio2.png

radio button example http://katzekat.de/Bilder/radio.png

这是我的想法:

将 ajaxSingle 设置为 true 意味着只有单选按钮将在服务器上被处理。它旁边的下拉列表不需要验证——它总是包含正确的值。我添加了 process="myDropdown"以便将值保留到支持 bean 中,否则当我将单选按钮切换到位置 2 时,下拉列表将恢复到其原始值。 (我意识到这只是表面功夫!)我用调试器对此进行了检查,它确实在支持 bean 中设置了属性,并且一切都按预期工作。

一旦单选按钮切换到位置 2,就可以在文本框中输入一个值并将对其进行验证。这非常有效,当我将单选按钮切换回位置 1 时,如果该字段处于错误状态,验证错误将被清除。大概是因为错误消息仅存在于请求范围内。

当单选按钮位于位置 2 并在文本字段中输入有效值时再次启动调试器显示切换回位置 1 时支持 bean 没有更新。我也预料到了这一点,因为我只告诉 radio 和要在服务器上处理的下拉菜单。这是我不明白的一点——文本字段中的值 is 在回发时保留。 (见上面的第二个链接)如果不在支持 bean 中,这个文本字段的这个值保存在哪里?

最佳答案

提交的表单值在Apply Request Values 阶段存储在组件中。

例如,在您的情况下,文本字段的 javax.faces.component.html.HtmlInputText#decode 方法调用 javax.faces.component.UIInput#setSubmittedValue。提交的值未设置为 bean(如您预期的那样),因为该组件未包含在 execute 部分中。然后 inputText 的渲染器重新显示(写入响应)提交的值。

当验证失败时,它的工作原理是一样的。提交的值存储在 Apply Request Values 阶段,然后由于验证失败,提交的值未设置为 beans(跳过 Update Model Values 阶段),然后提交重新显示值。

关于jsf - Richfaces 和 JSF/AJAX 生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16154315/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com