如何在Spring Web Flow中处理Primefaces p:ajax事件

时间:2012-11-21 20:03:16

标签: primefaces spring-webflow

是否有'优雅'的方式让SWF响应Primefaces Ajax事件?如下所示:

<p:dataTable id="myDT" value="#{myList}" var="listVal">
<p:ajax event="rowToggle" update="expandedText" />  
<p:rowToggler>
<h:outputText id="expandedText" value="#{listVal.someText}"/>
</p:rowToggler>
</p:dataTable>

如果我可以在我的视图中触发SWF操作并呈现适当的片段,那将是理想的:

<view-state id="myView" view="myview.xhtml">
<transition on="myDT:rowToggle"  to="showRowContents" >
<render fragments="expandedText"/>
</transition>

目前我所知道的唯一解决方法是让Ajax事件调用RemoteCommand:

<p:dataTable id="myDT" value="#{myList}" var="listVal">
<p:remoteCommand name="rowToggleCommand" action="rowToggle"  update="expandedText"/>
<p:ajax event="rowToggle" oncomplete="rowToggleCommand()" />  
<p:rowToggler>
<h:outputText id="expandedText" value="#{listVal.someText}"/>
</p:rowToggler>
</p:dataTable>

我觉得解决方法有些难看,而且它还会导致两个Ajax请求而不是一个。我相信有可能修补SWF方面以响应此类Ajax事件,但不知道从哪里开始。

1 个答案:

答案 0 :(得分:0)

经过大量的研究,我明白这是不可能的。 SWF架构不容易允许响应此类事件。您仍然可以在Ajax事件上调用bean方法,如果您将此修复程序放在适当位置,任何负责其部分呈现的Facelets组件都将正确响应Ajax事件:http://static.springsource.org/spring-webflow/docs/2.3.x/reference/html/ch13s10.html

另见我关于同一主题的另一个问题:Primefaces RowEditor does not work with Spring Webflow

任何与SWF相关的操作都必须由Primefaces RemoteCommand组件或类似(CommandButton等)调用