使用webflow渲染标记时,oncomplete不会在a4j:commandButton上触发

时间:2015-04-06 19:22:44

标签: richfaces jsf-2.2 spring-webflow-2

使用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正在运行。

0 个答案:

没有答案