我正在使用RichFaces的a4j:支持切换页面上某些控件的可见性。但是,当更改h:selectOneRadio按钮rdoRequestType时,它将清除txtLibraryServerNumber和a4j:outputPanel中ID为“media”的其他控件的值。为什么页面上的一个AJAX调用会干扰不同的AJAX面板?
我尝试在selectOneRadio上的a4j:support标签上使用“process”属性,因此它将其他面板中的文本框的值写入Seam bean,但这没有任何效果。我到底做错了什么?救命!我失去了理智!!
<h:selectOneRadio value="#{webencode.requestType}"
id="rdoRequestType" styleClass="radio" style="width:295px" layout="pageDirection" >
<f:selectItem itemValue="program" itemLabel="Series or Individual Program"/>
<f:selectItem itemValue="promo" itemLabel="Promo" />
<f:selectItem itemValue="specific" itemLabel="Specific Format Encoding Request"/>
<a4j:support ajaxSingle="true" event="onclick" reRender="program" process="txtLibraryServerNumber,txtDigitalMediaFileName"/>
</h:selectOneRadio>
<a4j:outputPanel id="program" ajaxRendered="true">
<s:span rendered="#{('program' == webencode.requestType || 'promo' == webencode.requestType) ? true : false}">
<h:selectOneMenu value="#{webencode.seriesId}" id="lstSeriesName">
<f:selectItems value="#{webencode.programItems}"/>
</h:selectOneMenu>
</s:span>
<s:span rendered="#{'specific' == webencode.requestType ? true : false}">
<h:selectOneMenu value="#{webencode.arrVideoEncodings.get(0).videoEncoding}"
id="lstSpecificVideoEncoding1" style="width:295px;">
<f:selectItems value="#{webencode.videoEncodingItems}"/>
</h:selectOneMenu>
</s:span>
</a4j:outputPanel>
<h:selectOneMenu value="#{webencode.inputMediaType}"
id="lstInputMediaType">
<f:selectItems value="#{webencode.inputMediaTypeItems}"/>
<a4j:support ajaxSingle="true" event="onchange" reRender="media" process="lstSeriesName,lstSpecificVideoEncoding1"/>
</h:selectOneMenu>
<a4j:outputPanel id="media" ajaxRendered="true">
<s:span rendered="#{'Tape Library # or Server ID #' == webencode.inputMediaType ? true : false}">
<h:inputText id="txtLibraryServerNumber"
value="#{webencode.libraryServerNumber}" maxlength="50" />
</s:span>
<s:span rendered="#{'Digital Media File Name' == webencode.inputMediaType ? true : false}">
<h:inputText id="txtDigitalMediaFileName"
value="#{webencode.digitalMediaFileName}" maxlength="195" /><br />
</s:span>
</a4j:outputPanel>
答案 0 :(得分:1)
如果您将面板的UpdateMode属性设置为“always”,则会在发生任何回发时更新。如果将其设置为“条件”,它将仅在其自身的某个触发器导致回发时更新。
我不知道这是否会清除你的控件,但它可能是为什么一个面板影响另一个面板的答案。
答案 1 :(得分:1)
您的Webencode bean的范围是什么?它必须是Page或更长时间,否则每次通话都会丢失您的值。请记住,如果您未指定范围,则默认为Request,并且每个Ajax调用都是Request。
您的媒体面板始终会被刷新,因为您已使用ajaxRendered属性指定它,就像说“即使我没有被要求重新获得reRendered,也总是reRender我。”除非你有充分的理由使用ajaxRendered(例如总是像状态消息一样呈现的东西),否则你最好从明确指定reRender的内容开始。
此处不需要进程属性 - 摆脱它。
干杯,
d
答案 2 :(得分:0)
找到了解决方案:非常奇怪,但是在使用JBoss运行Apache的服务器上,需要将limitToList属性设置为true:
<a4j:support ajaxSingle="true" event="onchange" reRender="media"
limitToList="true"/>
这确保仅重新呈现指示的控件(在这种情况下为“媒体”)。仍然不知道为什么它在服务器上需要而不是在localhost上。需要与Apache有关,以及它如何与JBoss通信,但不确定。