jsp 模板继承 模仿djano的模板继承.

自从用了django 的模板继承之后,就越来越喜欢这种风格,它可以使页面更简介,无论自己查看代码,维护代码,都很舒服, 但java jsp 一直没有类似的东西, 在万能的谷歌帮助之下,找到了一些资料,其中一部分是用类似于tiles,sitemesh 等框架来实现,但这些都不是我心里想要的那种,最后搜索到了rapid framework 里面有提到这个东西,但却没有演示代码, 于是自己按提示加工改造了一下,可以正常工作。

做web 网站一般有同一的风格,头部,左边导航栏,主工作区,底部,头尾基本固定的,这些东西可以写在基类模板中,包括整个站点用到的css,js 都可以在基类模板中定义。 在基类模板中定义很多扩展点,其他继承于这个模板的页面,只需要写扩展点部分的页面代码就可以,这样页面就可以看起来很简洁.

实现的方式也很简单,就是写jsp tag, 自定义的 tag 来实现, 具体的实现,可以参考源代码.
比如,如下就是基类模板base.jsp
程序代码 程序代码

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>    
<%@ include file="taglibs.jsp"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<haed>
    <script type="text/javascript" src="${ctx }/js/alertBox.js"></script>
    <e:block name="js_css_extend"></e:block>
</head>

<body>  
    <input type="text" id="myname" name="myname" />
    
    <e:block name="content">
       this is the main content
    </e:block>
</body>  
</html>


作为测试模板,定义了两个扩展点js_css_extend,myname。 其他继承于这个模板的页面只需要实现扩展点即可, 比如index.jsp

程序代码 程序代码

<%@ taglib uri="http://yihaomen.com/jsp/extend/core" prefix="e" %>

<e:override name="js_css_extend">  
   <script type="text/javascript" src="${ctx }/js/jquery/html5.js"></script>  
</e:override>  

<e:override name="content">  
   <div>
       <h2>test</h2>
       <p>This is my test.</p>
   </div>
</e:override>  

<%@ include file="base.jsp" %>


标签的定义
程序代码 程序代码

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
    version="2.1">
    
  <description>my jsp extend tags</description>
  <display-name>jsp extend</display-name>
  <tlib-version>1.0</tlib-version>
  <short-name>e</short-name>
  <uri>http://yihaomen.com/jsp/extend/core</uri>
  
  <tag>
    <description> block tag  </description>
    <name>block</name>
    <tag-class>com.yihaomen.extend.tag.BlockTag</tag-class>
    <body-content>JSP</body-content>

    <attribute>
        <description> block name </description>
        <name>name</name>
        <required>true</required>
        <rtexprvalue>true</rtexprvalue>
    </attribute>
  </tag>

  <tag>
    <description> override desc  </description>
    <name>override</name>
    <tag-class>com.yihaomen.extend.tag.OverrideTag</tag-class>
    <body-content>JSP</body-content>

    <attribute>
        <description> override name, must be equals block name for override  </description>
        <name>name</name>
        <required>true</required>
        <rtexprvalue>true</rtexprvalue>
    </attribute>
  </tag>
  
</taglib>


这样就可以很简单的实现jsp 模板的继承,用起来很爽. 测试源代码下载:

下载文件 jsp template extend sapmel


除非申明,文章均为一号门原创,转载请注明本文地址,谢谢!
[本日志由 yihaomen 于 2015-02-25 08:14 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: jsp extend
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.