• jsp2.0+中的标签文件,JSP Fragment技术


    刚进新公司不久,今天在看到项目中用到了.tag文件。刚開始我还以为这个是第三方类似freemarker的模板技术。问了下项目组的其它人员,原来这是jsp2.0以来就有的JSP Fragment技术。曾经做项目的时候从来没实用这种方式,要公用就用用jsp中的include和jsp:include的方式。事实上JSP Fragment也有include的作用,可是它更像第三方sitemesh技术。用于网页布局和修饰,能够将网页的内容和页面的结构分离。从而达到页面结构共享的目的。

    以下的样例来说明怎么使用jsp fragment。

    官方E文參考文档http://docs.oracle.com/javaee/5/tutorial/doc/bnama.html

    DEMO

    1 首先在项目的WEB-INF/tags文件里,新建例如以下内容的tpl.tag文件

    <%@ tag language="java" pageEncoding="UTF-8"%>
    <%@ attribute name="title"%>
    <%@ attribute name="tpl1" fragment="true" required="true"%>
    <%@ attribute name="tpl2" fragment="true" required="true"%>
    <%@ attribute name="tpl3" fragment="true" required="true"%>
    <!DOCTYPE html>
    	<html>
    		<head>
    			<meta charset="utf-8">
    			<title>${title}</title>
    			<style type="text/css">
    			   #div1,#div2,#div3{
    			      90%;
    			      margin:10px auto;
    			      border:10px solid red;
    			   }
    			</style>
    		</head>
    		<body>
    		    <h1>jsp2.0标签文件</h1>
    		    <div id="div1">
    		    	<jsp:invoke fragment="tpl1"/>
    		    </div>
    		    <div id="div2">
    		    	<jsp:invoke fragment="tpl2"/>
    		    </div>
    		    <div id="div3">
    		    	<jsp:invoke fragment="tpl3"/>
    		    </div>
    		    <h2>jsp2.0 fragment技术</h2>
    		</body>
    	</html>

    2  创建index.jsp 文件

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ taglib prefix="xjo" tagdir="/WEB-INF/tags"%>
    <xjo:tpl title="jsp标签文件的使用">
    	<jsp:attribute name="tpl1">
    		<h1>tpl1中的内容</h1>
    	</jsp:attribute>
    	<jsp:attribute name="tpl2">
    		<h1>tpl2中的内容</h1>
    	</jsp:attribute>
    	<jsp:attribute name="tpl3">
    		<h1>tpl3中的内容</h1>
    	</jsp:attribute>
    </xjo:tpl>

    3 訪问index.jsp页面。效果例如以下


    详细说明

    标签文件说明

    标签文件必须存放在WEB-INF文件夹下,最好是在WEB-INF文件夹下再新建一个tags文件夹,然后将全部的标签文件都存放在这里。标签文件能够使用全部的JSP元素,可是不能使用page指令。标签文件多个一个tag指令

    标签文件里隐藏对象

    标签文件能够使用隐藏对象:request、response、jspContext、session、application、out、config。当中jspContext隐含对象的类型为javax.servlet.jsp.JspContext,就相当于JSP页面的pageContext隐藏对象一样

    标签文件里指令

    标签文件里能够使用的主要指令:tag、include、attribute、variable。



    tag指令

    Tag文件里的tag指令类似于JSP文件里的page指令。Tag文件通过使用tag指令能够指定某些属性的值,以便从整体上影响Tag文件的处理和表示。tag指令的语法例如以下:
    <%@ tag 属性1="属性值" 属性2="属性值" …属性n="属性值"%>
    在一个Tag文件里能够使用多个tag指令,因此我们常常使用多个tag指令为属性指定须要的值:
     <%@ tag 属性1="属性值"%>
     <%@ tag 属性2="属性
     值"%>
     ……
     <%@ tag 属性n="属性值"%>
    <%@ tag language="java" 
            pageEncoding=""
            body-content="scriptless|empty|tagdependent"
            deferredSyntaxAllowedAsLiteral="false"
            description=""
            display-name=""
            dynamic-attributes=""
            example=""
            import=""
            isELIgnored="false"
            large-icon=""
            small-icon=""
            trimDirectiveWhitespaces="false"
    %>

    include 指令

    和jsp中的include指定一样,引入外部文件
    <%@include file="" %>

    attribute指令

    在Tag文件里通过使用attribute指令,能够动态地向该Tag文件传递须要的字符串数据
    <%@ attribute name="" 
                  description="" 
                  fragment="false" 
                  required="false"  
                  rtexprvalue="true" 
                  type=""
    %>
    name表示属性的名字;
    required表示是否为必要,默觉得false;
    rtexprvalue表示属性值能否够为run-time表达式。如为true。表示属性可用动态的方式来指定。如为false,则一定要用静态的方式来指定属性值;
    type表示这个属性的类型,默认值为java.lang.String;
    description用来说明此属性的相关信息
    fragment  表示是否为片段 默认false

    variable指令

    Tag文件通过使用variable指令能够将Tag文件里的对象返回给调用该Tag文件的JSP页面
    <%@ variable alias="" 
                 declare="true" 
                 description=""
                 name-from-attribute=""
                 name-given="" 
                 scope="NESTED|AT_BEGIN|AT_END"%>
    name-given表示直接指定变量的名称。
    name-from-attribute表示以自己定义标签的某个属性值为变量名称;
    alias表示声明一个局部范围属性,用来接收变量的值;
    variable-class表示变量的类名称,默认值为java.lang.String;
    declare表示此变量是否声明默认值为true。
    scope表示此变量的范围,范围是:AT_BEGIN、AT_END和NESTED。默认值为NESTED;
    description用来说明此变量的相关信息

    标签文件里的jsp:invoke

    <jsp:invoke fragment="" 
    	    var="" 
    	    scope="page|request|session|application" 
    	    varReader=""/>
        fragment  -  要片段名.
       var  -  给出变量名,  把片段经过 jsp 容器计算过之后的结果作为字符串保存. 
       varReader  -  同上,  只是将结果作为一个 java.io.Reader 保存. 
       scope  -  作用域 
    未完待续.......................

  • 相关阅读:
    XCode
    容器中的诊断与分析4——live diagnosis——LTTng
    容器中的诊断与分析3——live diagnosis——lldb
    容器中的诊断与分析2——live diagnosis——perf
    容器中的诊断与分析1——简介
    HTTP之gRPC
    Markdown介绍
    目标指定法——S.M.A.R.T.
    Facebook token更新
    代理配置
  • 原文地址:https://www.cnblogs.com/mthoutai/p/7083255.html
Copyright © 2020-2023  润新知