Mar*_*pan 4 jsf primefaces tabview uiinclude
我尝试在不同的选项卡中使用ui:include标记包含多个源页面路径.问题是当我将源页面路径视为静态时,意味着将显示页面,但如果从支持bean提供源页面路径意味着它将不包括页面.
这是我的代码
template.xhtml:
<p:layoutUnit position="center" id="layoutCenter">
<h:form id="tempFormId">
<p:tabView value="#{multiTabBean.tabsList}" var="useCase"
activeIndex="#{multiTabBean.activeTabIndex}">
<p:tab title="#{useCase.title}" closable="true">
<f:subview>
<h:panelGroup id="mainTempPanelGroupId" layout="block">
<ui:include src="#{useCase.path}" />
</h:panelGroup>
</f:subview>
</p:tab>
</p:tabView>
</h:form>
</p:layoutUnit>
Run Code Online (Sandbox Code Playgroud)
豆:
public String menuAction() {
menuBtnRendered = true;
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
selectedModuleViewId = externalContext.getRequestParameterMap().get(
"moduleViewId");
tabsList.add(new Tab(getTabId(selectedModuleViewId),
selectedModuleViewId, getModulePath(selectedModuleViewId)));
return null;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用@ViewScoped.
<ui:include>在视图构建时运行(当XHTML转换为JSF组件树时).<p:tabView>在视图渲染时运行(当JSF组件树需要生成HTML时).
因此,运行<p:tabView var>时不可用<ui:include>.这个问题在这个答案中详细说明:JSF2 Facelets中的JSTL有意义吗?(<ui:include>是一个taghandler,因此与JSTL标签具有相同的生命周期).
您可以通过使用<c:forEach>生成<p:tab>s代替而在一定程度上解决这个问题<p:tabView value>.
<p:tabView activeIndex="#{multiTabBean.activeTabIndex}">
<c:forEach items="#{multiTabBean.tabsList}" var="useCase" varStatus="loop">
<p:tab title="#{useCase.title}" closable="true">
<f:subview id="tab_#{loop.index}">
<h:panelGroup id="mainTempPanelGroupId" layout="block">
<ui:include src="#{useCase.path}" />
</h:panelGroup>
</f:subview>
</p:tab>
</c:forEach>
</p:tabView>
Run Code Online (Sandbox Code Playgroud)
有趣的是,你看到你<f:subview>在初始尝试中以某种方式使用它在那里完全无用(已经考虑过<p:tabView var>),但它实际上在这里有用(它NamingContainer在选项卡内容周围创建了一个新的).
| 归档时间: |
|
| 查看次数: |
11768 次 |
| 最近记录: |