私は 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 は再レンダリングされず、最初にヒットしたときにのみ呼び出されます。ボタン。
ですから、なぜこれが起こっているのか手がかりがあれば、私は感謝しています。
前もって感謝します