JSF

时间:2017-09-13 06:35:50

标签: jsf jsf-2 facelets uiinclude

背景 - 我正在开发一个使用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页面。用户输入信息后,需要显示数据。在此页面上,如果用户按下退出,则正文应包含退出页面。如果按了previous,则会再次显示searchRecord页面。

简而言之,我正在寻找包含动态<ui:include>的方法。否则,我必须为每个操作创建3-4个xhtml页面。

研究 -

我经历了几个问题 -

<ui:include> with dynamic src ... complete madness

Dynamic ui:include

但似乎没有什么能解决我的问题。当我使用如下 -

<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,我在启动第一页时遇到了困难。我试图通过使用初始化bean并设置标志的<f:event type="preRenderComponent">来解决这个问题。它解决了启动问题,我正确地获得了searchRecord页面。但是当我现在点击show details按钮时,要么它保持在同一页面上,要么它转到showDetails页面(使用postback()方法),细节不会显示(即不调用showDetails bean)。

有人可以指导我如何实现如上所述的动态布局吗?

0 个答案:

没有答案