0

我在 xhtml 页面(main.xhtml)中的 <ui:composition> 遇到了一些问题。Main.xhtml 和 ui:composition 都使用单独的 viewscoped beans(mainbean、compositebean)来绑定属性。ui:composition 页面内有一个 <h:commandbutton>;

  1. 当我点击这个命令按钮时,compositebean 的 prerender 方法被调用,但是 action 方法没有被调用。但是当 mainbean 设置为 sessionscoped bean 时,它起作用了。为什么会有这种行为?

  2. <ui:composition> 的 src 属性是从 viewscoped 托管 bean 属性动态绑定的:<ui:include src="#{mainbean.linkURL}" id="composite"/>。但是当我硬编码 ui:composition 的 src 属性时, <h:commandbutton> 正确调用了 action 方法:<ui:include src="composite.xhtml"/>.

  3. 如果未在 web.xml 中指定 javax.faces.STATE_SAVING_METHOD,那将是默认的状态保存机制?
4

1 回答 1

2

1 和 2 的答案<ui:include>是标签处理程序,而不是 UI 组件。这在 JSF2 Facelets 中的 JSTL 中得到了进一步阐述……有意义吗?简而言之:标签处理程序在视图构建期间运行,而 UI 组件在视图渲染期间运行。<ui:composition>这和朋友完全无关。

3 在JSF 规范的第 11.1.3 章中回答。这是一个复制粘贴:

  • javax.faces.STATE_SAVING_METHOD-- 保存状态信息的位置。有效值为“<code>server”(通常保存在 HttpSession 中)和“<code>client”(通常保存为后续表单提交中的隐藏字段)。如果未指定,则必须使用默认值“<code>server”。
于 2013-08-14T11:31:42.843 回答