背景 -我正在开发一个使用 JSP 作为视图技术的遗留 JSF 应用程序。现在,由于我们决定迁移到 JSF 2.2/2.3,我们还将 JSP 页面更改为 facelets。
问题 -我们有以下模板 - Layout.xhtml - 包含如下布局 -
<ui:insert name="header"></ui:insert>
<ui:insert name="body"></ui:insert>
<ui:insert name="footer"></ui:insert>
以下是一个示例文件(例如,index.xhtml) -
<ui:composition template="/layout.xhtml">
<ui:define name="header"><h1>Sample Header</h1></ui:define>
<ui:define name="body"><ui:include src="/searchRecord.xhtml"></ui:define>
<ui:define name="footer"><h3>Sample foorter</h3></ui:define>
</ui:compositio>
问题是 - 所有页面的页眉和页脚都相同,但正文会不同。即首先当应用程序启动时,会显示searchRecord 页面。用户输入信息后,需要显示数据。在此页面上,如果用户按退出,则正文应包含退出页面。如果按上一个,将再次显示 searchRecord 页面。
简而言之,我正在寻找包含 dynamic 的方法<ui:include>
。否则,我必须为每个操作创建 3-4 个 xhtml 页面。
研究 -
我已经解决了几个问题-
但似乎没有什么能解决我的问题。当我使用如下 -
<ui:fragment rendered="#{bean.searchRecord}>
<ui:include src="/searchRecord.xhtml">
</ui:fragment>
<ui:fragment rendered="#{bean.showDetails}>
<ui:include src="/showdetails.xhtml">
</ui:fragment>
<ui:fragment rendered="#{bean.exit}">
<ui:include src="/exit.xhtml">
</ui:fragment>
首先,由于 bean 未初始化,我在启动第一页时遇到了困难。我试图通过使用<f:event type="preRenderComponent">
which 初始化 bean 并设置标志来解决这个问题。它解决了启动问题,我正确获取了 searchRecord 页面。但是,当我现在单击显示详细信息按钮时,它要么保留在同一页面上,要么转到 showDetails 页面(使用 postback() 方法),不显示详细信息(即未调用 showDetails bean)。
有人可以指导我如何实现上述动态布局吗?