Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSF1.2和RichFaces中的Ajax和请求范围bean_Java_Ajax_Jsf_Jakarta Ee_Richfaces - Fatal编程技术网

Java JSF1.2和RichFaces中的Ajax和请求范围bean

Java JSF1.2和RichFaces中的Ajax和请求范围bean,java,ajax,jsf,jakarta-ee,richfaces,Java,Ajax,Jsf,Jakarta Ee,Richfaces,我正在使用JSF1.2和RichFaces3.3,我有一个名为NewsItemDetails的页面,其结构如下 <h:form> <h:panelBar> <h:panelBarItem> <myTag:searchModule /> </h:panelBarItem> </h:panelBar> </h:form> 该页面的支持bean属于请求范围,下面是faces-c

我正在使用JSF1.2和RichFaces3.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>

newsItemDetails
类。位置。。。
要求
身份证件
#{param['id']}
下面是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发送到服务器的请求。如果我调用相同的searchModule标记,就在rich:panelBarItem之外,我点击搜索按钮,动作监听器被调用,但数据表没有被重新呈现,它只是在我第一次点击按钮时被调用

因此,如果有人知道为什么会发生这种情况,我将不胜感激


提前感谢

我已经找到了答案,显然支持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>

newsItemDetails
类。位置。。。
一场
正如您所看到的,我必须删除条目,而是从支持bean中的请求对象获取它


谢谢大家。

当您第一次进入页面时,panelBarItem是否默认呈现?如果要进行ajax调用,为什么要使用h:commandButton而不是a4j:commandButton?(reRender属性在h:commandButton中没有意义)。panelBarItem有一个条件,但默认情况下是渲染的,关于h:commandButton,我实际上使用的是a4j:commandButton,但这是一个输入错误。我能想到的唯一能阻止调用actionListener的是commandButton在restoreView阶段没有呈现。尝试将支持bean的范围从请求更改为会话。如果这可以解决问题,那么问题在于包含commandButton的内容在restoreView阶段不会被认为是呈现的。我认为问题出在rich:panelBar及其子组件中,正如我前面所说的,我调用了它外部的标记,它可以工作,并且调用了action listener,除此之外,id不会重新引发dataTable,而是从rich:panelBar内部重新引发。