我正在使用 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 没有重新渲染,它只在我第一次点击时被调用按钮。
因此,如果有人知道为什么会发生这种情况,我将不胜感激。
提前致谢