我在使用< ui:composition>时遇到了一些麻烦在xhtml页面(main.xhtml)中。 Main.xhtml和ui:composition都使用单独的viewscoped bean(mainbean,compositebean)来绑定属性。有一个< h:commandbutton>在ui:组合页面;
当我单击此命令按钮时,将调用compositebean的prerender方法,但未调用action方法。但是当mainbean被设置为sessionscoped bean时,它起作用了。为什么会这样?
&lt; ui:composition&gt;的src属性是从视图结构的托管bean属性动态绑定:<ui:include src="#{mainbean.linkURL}" id="composite"/>
。但是当我硬编码ui:composition的src属性时,&lt; h:commandbutton&gt;正确调用了操作方法:<ui:include src="composite.xhtml"/>
。
答案 0 :(得分:2)
1和2的回答是<ui:include>
是标签处理程序,而不是UI组件。这在JSTL in JSF2 Facelets... makes sense?中进一步阐述。简而言之:标签处理程序在视图构建时运行,而UI组件在视图渲染时运行。这与<ui:composition>
和朋友完全无关。
3在JSF specification的第11.1.3章中得到了回答。这是一个copypaste:
javax.faces.STATE_SAVING_METHOD
- 保存状态信息的位置。有效值是 “server
”(通常保存在HttpSession中)和“client
(通常在后续表单中保存为隐藏字段) 提交)。如果未指定,则必须使用默认值“server
”。