Java JSF1.2和RichFaces中的Ajax和请求范围bean
我正在使用JSF1.2和RichFaces3.3,我有一个名为NewsItemDetails的页面,其结构如下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
<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内部重新引发。