使用spring-webflow 2.4.1和richfaces 4.5.4与jsf参考实现2.2.10。
我创建了一个简单的表单,其中包含一个a4j:commandButton来重现该问题。命令按钮上的操作调用Webflow流中的转换。转换时有一个渲染标记来重新渲染面板。 oncomplete不会触发。如果我注释掉或删除渲染,则oncomplete会触发。这当然具有不重新渲染面板的缺点。使用日志记录,我已经验证了BobBean.changeShowStuff()是否有渲染。
这是xhtml:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:a4j="http://richfaces.org/a4j">
<h:head/>
<h:body>
<h:panelGroup id="bobPanel" layout="block">
<h:outputText value="bob was here" rendered="#{bean.showStuff}"/>
</h:panelGroup>
<h:form id="bobForm">
<a4j:commandButton id="btnSubmitQuery"
oncomplete="alert('bob')"
value="Submit Query"
action="reportData"/>
</h:form>
</h:body>
</html>
流程:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated 4/17/2012 21:49:55 by FreeMarker 2.3.16 -->
<flow xmlns="http://www.springframework.org/schema/webflow"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/webflow http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd">
<var name="bean" class="BobBean" />
<view-state id="bob">
<transition on="reportData">
<evaluate expression="bean.changeShowStuff()" />
<!-- <render fragments="bobPanel"/> -->
</transition>
</view-state>
</flow>
和支持bean: import java.io.Serializable;
公共类BobBean实现了Serializable {
private static final long serialVersionUID = 1L;
private boolean showStuff = false;
public boolean isShowStuff() {
return showStuff;
}
public void changeShowStuff() {
showStuff = !showStuff;
}
}
如何在webflow中获取渲染并使用richfaces中的oncomplete来处理同一个commandButton?
编辑:这是单击actionButton时从服务器返回的响应主体。
使用流中的render标记(我添加了新行):
<?xml version='1.0' encoding='UTF-8'?>
<partial-response id="j_id1"><changes>
<update id="bobPanel"><![CDATA[<div id="bobPanel">bob was here</div>]]></update>
<update id="j_id1:javax.faces.ViewState:0"><![CDATA[e1s1]]></update>
</changes></partial-response>
没有流程中的render标记:
<?xml version='1.0' encoding='UTF-8'?>
<partial-response id="j_id1"><changes>
<update id="j_id1:javax.faces.ViewState:0"><![CDATA[e2s1]]></update>
<extension id="org.richfaces.extension">
<complete>alert('bob');</complete></extension>
</changes></partial-response>
因此,如果渲染标记在流中,则缺少完整的部分。在升级webflow(2.0到2.4),JSF(1.2到2.2)和richfaces(3.3到4.5)之前,oncomplete正在运行。