0

RichFaces の a4j:support を使用して、ページ上の一部のコントロールの表示を切り替えています。ただし、h:selectOneRadio ボタン rdoRequestType が変更されると、txtLibraryServerNumber および ID "media" の a4j:outputPanel 内の他のコントロールの値がクリアされます。ページ上の 1 つの 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>
4

3 に答える 3

1

パネルの UpdateMode プロパティが「always」に設定されている場合、ポストバックが発生すると更新されます。「条件付き」に設定すると、独自のトリガーの1つがポストバックを引き起こした場合にのみ更新されます。

これがあなたのコントロールをクリアするかどうかはわかりませんが、あるパネルが別のパネルに影響を与えている理由に対する可能な答えです.

于 2010-02-15T22:27:41.943 に答える
1

Webencode Bean のスコープは? ページまたはそれより長くなければなりません。そうしないと、コールごとに値が失われます。スコープを指定しない場合、デフォルトで Request になり、各 Ajax 呼び出しが Request になることに注意してください。

ajaxRendered 属性で指定したため、メディア パネルは常に更新されます。これは、「再レンダリングを求められなくても、常に再レンダリングしてください」と言っているようなものです。ajaxRendered を使用する正当な理由がない限り (たとえば、ステータス メッセージのように常にレンダリングされるもの)、何を再レンダリングするかを明示的に指定することから始める方がよいでしょう。

ここでは process 属性は必要ありません。削除してください。

乾杯、

D

于 2010-02-16T00:00:33.287 に答える
0

解決策が見つかりました: 非常に奇妙ですが、JBoss で Apache を実行しているサーバーでは、limitToList 属性を true に設定する必要があります。

<a4j:support ajaxSingle="true" event="onchange" reRender="media" 
     limitToList="true"/>

これにより、指定されたコントロール (この場合は「メディア」) のみが再レンダリングされます。サーバーでは必要であるが、ローカルホストでは必要でない理由はまだわかりません。Apache とそれが JBoss とどのように通信するかについて何かを考えなければなりませんが、よくわかりません。

于 2010-02-22T22:39:09.367 に答える