JSF 1.2和Rich Faces中的Ajax和Request Scoped bean

时间:2012-06-04 08:32:33

标签: java ajax jsf java-ee richfaces

我正在使用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不会被重新渲染,并且它只在我第一次调用时被调用按钮。

因此,如果有人知道为什么会这样,我会非常感激。

提前致谢

1 个答案:

答案 0 :(得分: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中的请求对象获取它。

谢谢大家。