JSP中的模板化。将来自不同模板客户端的<script>和<link>标记添加到模板的<head>标记</script>

时间:2015-01-30 15:21:13

标签: jsp jstl jsp-tags

我将在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>

0 个答案:

没有答案