我们如何将多个xhtml页面包含在摘要页面中.
这里所有的xhtml页面都包含相同的模板.
这里所有的xhtml页面都包含相同的模板.
commonTemplate.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:c="http://java.sun.com/jsp/jstl/core" xmlns:ui="http://java.sun.com/jsf/facelets"> <head> <title> SNS </title> <Meta http-equiv="expires" content="0"/> <Meta http-equiv="pragma" content="no-cache"/> <Meta http-equiv="cache-control" content="no-cache"/> <Meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link rel="stylesheet" href="sns.css" type="text/css" /> </head> <h:body> <div id="header"> <ui:insert name="commonHeader"> <ui:include src="header.xhtml" /> </ui:insert> </div> <div id="content"> <ui:insert name="commonBodyContent"> Common Body Content. </ui:insert> </div> <div id="footer"> <ui:insert name="commonFooter"> <ui:include src="footer.xhtml" /> </ui:insert> </div> </h:body> </html>
updatePersonalDetails.xhtml
<ui:composition 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" template="commonTemplate.xhtml"> <ui:define name="commonBodyContent"> .........; ..........; </ui:define> </ui:composition>
updatedAddress.xhtml
<ui:composition 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" template="commonTemplate.xhtml"> <ui:define name="commonBodyContent"> .........; ..........; </ui:define> </ui:composition>
selectPreferences.xhtml
<ui:composition 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" template="commonTemplate.xhtml"> <ui:define name="commonBodyContent"> .........; ..........; </ui:define> </ui:composition>
summary.xhtml
<ui:composition 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:include src="updatePersonalDetails.xhtml" /> <ui:include src="updatedAddress.xhtml" /> <ui:include src="selectPreferences.xhtml" /> </ui:composition>
无论我在所有xhtml页面中拥有什么数据,都应该在摘要页面中显示完全相同.但包括这会导致多个< html>要在页面上呈现的文档.
我们怎么解决这个问题?
解决方法
将正文内容移动到另一个模板中,其中包含< ui:include>在模板客户端中也是如此.
例如. updatePersonalDetails.xhtml
<ui:composition 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" template="commonTemplate.xhtml"> <ui:define name="commonBodyContent"> <ui:include src="updatePersonalDetails-content.xhtml" /> </ui:define> </ui:composition>
(也为其他人重复)
所以你可以在summary.xhtml中这样做:
<ui:composition 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" template="commonTemplate.xhtml"> <ui:define name="commonBodyContent"> <ui:include src="updatePersonalDetails-content.xhtml" /> <ui:include src="updatedAddress-content.xhtml" /> <ui:include src="selectPreferences-content.xhtml" /> </ui:define> </ui:composition>
与具体问题无关,请考虑放置模板并包含在/ WEB-INF文件夹中以防止直接访问它们.另见Which XHTML files do I need to put in /WEB-INF and which not?