[英]JSF Primefaces left, center layout
单击“左侧”菜单中的按钮时,我不知道如何显示在中心屏幕中。
现在,当我单击“左”菜单中的按钮时,会打开一个新页面,而没有“左”菜单,但是我不想要它,我需要“左”菜单不消失。
下面是我的代码。
<h:head>
<title>Facelet Title</title>
</h:head>
<frameset rows="65,*" frameborder="0">
<frame scrolling="no" src="header.xhtml"/>
<frameset cols="200,*" frameborder="0">
<frame scrolling="no" src="menu.xhtml"/>
</frameset>
</frameset>
基本上,您需要给目标框架起一个name
并在<a>
元素的target
属性中指定它。 例如
<frame name="center">
同
<a href="page.xhtml" target="center">
但是,这并非完全是现代Web应用程序模板化的正确方法。 框架集在用户体验和SEO评估价值方面有许多缺点。 相反,应该使用任何服务器侧视图技术(包括您所使用的Facelets)的include和tempulation工具。 仅当您手头上完全没有服务器服务器侧视图技术(因此,只有纯HTML)或要显示外部网站时,才应使用框架集。
使用Facelets,您应该改为使用类似这样的内容作为主模板
/WEB-INF/templates/layout.xhtml
<!DOCTYPE html>
<html lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<title><ui:insert name="title">Default title</ui:insert></title>
</h:head>
<h:body>
<div id="header"><ui:include src="/WEB-INF/includes/header.xhtml"></div>
<div id="menu"><ui:include src="/WEB-INF/includes/menu.xhtml"></div>
<div id="content"><ui:insert name="content">Default content</ui:insert></div>
</h:body>
</html>
(您可以使用CSS以所需的方式float:left
布局组件,例如#menu
和#content
上的float:left
)
这就是模板客户端(实际上是通过URL打开的页面)的外观:
/page.xhtml
<ui:composition template="/WEB-INF/templates/layout.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:define name="title">
New page title here
</ui:define>
<ui:define name="content">
<h1>New content here</h1>
<p>Blah blah</p>
</ui:define>
</ui:composition>
有关现代JSF / Facelets Web应用程序的开放源代码示例,请检查OmniFaces展示应用程序 。
当您使用PrimeFaces时,还有另一种选择, <p:layout>
。 请参见其展示应用程序中的“完整示例” ,例如此示例。
您的描述有些混乱,但是我想您正在使用JSF模板系统,从而使您可以在多个页面上包含相同的代码(例如,菜单)。 镜框非常过时,不再使用。
参见http://www.mkyong.com/jsf2/jsf-2-templating-with-facelets-example/
作为进一步的评论,此问题似乎与Primefaces(这是一个组件包,这些注释中未包含任何代码)有关。
这是一个简单的页眉,页面,页脚示例。 所有人都可以相信或不相信它,都可以使用一个表单ID。 标头位于WebContent / templates中。 其他.xhtml可以放在WebContent中。 如果您的@ManagedBean String方法返回“ second”,则将显示second.xhtml页面。 每个页面仍然与其自己的@ManagedBean对话。
<body">
<f:view>
<div id="container">
<h:form id="templateForm">
<div id="header">
<ui:include src="header.xhtml" />
</div>
<div id="wrapper">
<div id="firstId">
<ui:insert name="first"></ui:insert>
</div>
<div id="secondId">
<ui:insert name="second"></ui:insert>
</div>
<div id="inputMaskId">
<ui:insert name="inputMask"></ui:insert>
</div>
<div id="valtestId">
<ui:insert name="valtest"></ui:insert>
</div>
</div>
<div id="footer">
<ui:include src="footer.xhtml" />
</div>
</h:form>
</div>
</f:view>
</body>
我们可以使用布局来代替包含名称空间xmlns:p =“ http://primefaces.org/ui”
<p:layout fullPage="true">
<p:layoutUnit position="north" size="100" header=
"Top" resizable="true" closable="true" collapsible="true">
<h:outputText value="Layout content for North" />
</p:layoutUnit>
<p:layoutUnit position="south" size="100" header="Bottom"
resizable="true" closable="true" collapsible="true">
<h:outputText value="Layout content for South" />
</p:layoutUnit>
<p:layoutUnit position="west" size="200" header=
"Left" resizable="true" closable="true" collapsible="true">
<h:outputText value="Layout content for West" />
</p:layoutUnit>
<p:layoutUnit position="east" size="200" header=
"Right" resizable="true" closable="true" collapsible="true">
<h:outputText value="Layout content for Right" />
</p:layoutUnit>
<p:layoutUnit position="center">
<h:outputText value="Layout content for Center" />
</p:layoutUnit>
</p:layout>
这将渲染五个面板
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.