0

私は JSF 1.2 と RichFaces 3.3 を使用しています。次の構造を持つ NewsItemDetails というページがあります。

<h:form>
  <h:panelBar>
    <h:panelBarItem>
      <myTag:searchModule />
    </h:panelBarItem>
  </h:panelBar>
</h:form>

そのページのバッキング Bean はリクエスト スコープであり、faces-config.xml のスニペットは次のとおりです。

<managed-bean>
  <managed-bean-name>newsItemDetails</managed-bean-name>
  <managed-bean-class>class.location...</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
  <managed-property>
     <property-name>id</property-name>
     <value>#{param['id']}</value>
  </managed-property>
</managed-bean>

最後に、searchModule タグのスニペットを示します。

<ui:composition>
   <rich:tabPanel>
     <rich:tab label="Images">
       <h:panelGrid columns="2">
         <h:inputText value="#{newsItemDetails.searchLabel}" />
         <a4j:commandButton value="Search" actionListener="#{newsItemDetails.onSearch}" reRender="mediaItemsSearchResults, imagesDataTable" />
       </h:panelGrid>

       <a4j:outputPanel id="mediaItemsSearchResults" ajaxRendered="true">
         <rich:dataTable id="imagesDataTable" value="#{newsItemDetails.searchResults}" var="image">
           <h:column>
             <h:outputText value="#{image.title}"/>
           </h:column>
         </rich:dataTable>
       </a4j:outputPanel>

     </rich:tab>
   </rich:tabPanel>
</ui:composition>

ここでの問題は、検索ボタンを押すたびにアクション リスナーが呼び出されないことですが、Firebug を介してサーバーに送信されたリクエストを確認できました。そして、rich:panelBarItem のすぐ外側で同じ searchModule タグを呼び出し、アクション リスナーが呼び出される検索ボタンを押すと、奇妙になりますが、dataTable は再レンダリングされず、最初にヒットしたときにのみ呼び出されます。ボタン。

ですから、なぜこれが起こっているのか手がかりがあれば、私は感謝しています。

前もって感謝します

4

1 に答える 1

0

どうやら、バッキング Bean のスコープをリクエストではなくセッション スコープに設定する必要があったようです。それを行うと、すべてがうまく機能します。したがって、faces-config.xml のエントリは次のようになります。

<managed-bean>
  <managed-bean-name>newsItemDetails</managed-bean-name>
  <managed-bean-class>class.location...</managed-bean-class>
  <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

ご覧のとおり、エントリを削除し、代わりにバッキング Bean のリクエスト オブジェクトから取得する必要がありました。

皆さんありがとう。

于 2012-06-04T11:36:19.147 に答える