我将在JSP中进行模板化,如下所示。下面给出的标记文件存储在/WEB-INF/tags
。
genericTag.tag(这是一个基本模板):
<%@tag description="put the tag description here" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@attribute name="north" fragment="true" %>
<%@attribute name="south" fragment="true" %>
<%@attribute name="west" fragment="true" %>
<%@attribute name="title" required="true" fragment="true"%>
<%@attribute name="header" fragment="true"%>
<html>
<head>
<link href="resources/admin/css/main-template-css.css" rel="stylesheet"/>
<link rel="stylesheet" href="resources/admin/css/header-menu.css"/>
<link rel="stylesheet" href="resources/default/css/header-style.css"/>
<script type="text/javascript" src="resources/default/js/jquery-1.8.0.min.js">
</script>
<script type="text/javascript" src="resources/default/js/template-script.js">
</script>
<jsp:invoke fragment="header"/>
</head>
<title><jsp:invoke fragment="title"/></title>
<body>
<div id="container" class="clearfix">
<div id="north">
<jsp:invoke fragment="north"/>
</div>
<div id="west">
<jsp:invoke fragment="west"/>
</div>
<div id="content">
<jsp:doBody/>
</div>
</div>
<div id="south">
<jsp:invoke fragment="south"/>
</div>
</body>
</html>
template.tag(它是使用genericTag.tag的基本模板标记):
<%@tag description="put the tag description here" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
<%@attribute name="pageTitle" required="true"%>
<t:genericTag>
<jsp:attribute name="header">
<script type="text/javascript" src="resources/default/js/template-scriptsss.js">
</script>
</jsp:attribute>
<jsp:attribute name="title">${pageTitle}</jsp:attribute>
<jsp:attribute name="north">
<jsp:include page="/WEB-INF/admin_template_files/North.jsp" flush="false"/>
</jsp:attribute>
<jsp:attribute name="west">
<jsp:include page="/WEB-INF/admin_template_files/West.jsp" flush="false"/>
</jsp:attribute>
<jsp:attribute name="south">
<jsp:include page="/WEB-INF/admin_template_files/South.jsp" flush="false"/>
</jsp:attribute>
<jsp:body>
<jsp:doBody/>
</jsp:body>
</t:genericTag>
最后,使用所述模板的任何模板客户端(Test.jsp)如下所示。
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
<t:template pageTitle="Test">
<p>
Contents of the tag body go here.
</p>
</t:template>
这一切都很好。现在,我需要在需要时从不同的模板客户端添加一些JavaScript / CSS文件(<script src="path/to/jsFile">
,<link href="path/to/cssFile">
)。
使用<jsp:attribute>
(例如{。1}}之类的template.tag文件中显示的<jsp:attribute name="header">
会将JavaScript / CSS文件添加到模板的<head>
标记中,但这是固定的。需要随机从不同的模板客户端添加它们。当完全透明地依赖于功能要求时,哪个客户端可能添加或不添加它们是不固定的。
这可以通过某种方式将JavaScript / CSS文件添加(导入)到给定模板客户端模板的<head>
标记中吗? (目前,它们是从基本模板标签 - template.tag添加的。它是固定的,不灵活,不能在不同的模板客户端之间重复使用。)
我使用带有pageTitle
标记的属性<t:template>
,该标记提供模板的<title>
标记的值/文本。
JSP是否像Facelets那样(在模板上)提供了一些工具
<title><ui:insert name="title">Default Title</ui:insert></title>
然后可以从模板客户端覆盖<title>
标记的默认值,例如
<ui:define name="title">New Page Title</ui:define>