将 Web Flow (2.3.1.RELEASE) 与 JSF 结合使用时,在使用任何类型的复合组件时出现渲染问题,例如<h:outputLabel />
单击<h:commandLink />
. 复合组件的内容始终显示在页面底部!刷新页面时,渲染又好了……
我可以很容易地使用以下代码重现这一点:
我的小脸:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:test="http://java.sun.com/jsf/composite/components">
<h:body>
<h:form id="form">
<h:commandLink id="link" value="link" /><br/>
<test:testComponent id="test" />
<h:outputLabel value="label" id="label" />
</h:form>
</h:body>
</html>
复合组件:
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:composite="http://java.sun.com/jsf/composite">
<composite:interface>
</composite:interface>
<composite:implementation>
<h:outputText value="hello world" />
</composite:implementation>
</ui:composition>
我的怀疑是,当 Web Flow 在恢复流程后恢复视图时,组件的顺序会混乱。在简单的 JSF facelet(不使用 Web Flow)中使用上述代码时,一切正常。
我已经通过 Mojarra 和 Web Flow 的内部进行了调试,可以看到在使用 Web Flow 而不是使用普通 JSF 时,FaceletViewHandlingStrategy 的 buildView(FacesContext ctx, UIViewRoot view) 方法中的顺序混合在一起。
我已经在 Spring 论坛和 Spring JIRA 上发布了同样的问题,但没有很多回复。
我要提前感谢任何看到这个问题的人!