javaweb框架--自定义标签与freemaker结合

来源:互联网 发布:王牌特工2 知乎 编辑:程序博客网 时间:2024/06/02 05:45


很有用但是不不知道怎么说,写个例子,总之方便多了,并且容易管理,重复利用强

1、自定一个类,实现 javax.servlet.jsp.tagext.Tag;(PageTag.java)

2、建立一个tld文件(myfTag.tld)

3、建立一个freemaker文件*.ftl(page.ftl)

4、建立jsp页面,导入标签(<%@taglib prefix="myf" uri="/muyunfei"%>)

5、jsp中使用( <myf:page action="/ftlhelloword" curpage="1"></myf:page>)

6、效果,以后使用很方便,如果需要修改直接改freemaker就可以

 

---------------------------------tag类开始------------------------------------------

 

public class PageTag  implements Tag {public PageContext pagecontex;public JspWriter out;//自定义属性,当前页private String curpage;//自定义属性,跳转路径private String action;//设置页面内容public void setPageContext(PageContext pc) {pagecontex = pc;out = pc.getOut();//再次方法中不能获取属性值}//结束@SuppressWarnings("unchecked")public int doEndTag() throws JspException {/*freemarker生成模板...开始*/ Configuration cfg = new Configuration();     //指定freemarker模板位置     cfg.setServletContextForTemplateLoading( pagecontex.getServletContext(), "WEB-INF/templates");try {Map root = new HashMap();root.put("curpage", curpage);root.put("action", action);root.put("path",pagecontex.getServletContext().getContextPath());//得到模板Template templ = cfg.getTemplate("page.ftl");//输出模板templ.process(root, out);} catch (TemplateException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}/*freemarker生成模板...结束*/     return 0;}//开始public int doStartTag() throws JspException {return 0;}public Tag getParent() {return null;}//释放控件public void release() {}public void setParent(Tag t) {}//-----------get setpublic String getCurpage() {return curpage;}public void setCurpage(String curpage) {this.curpage = curpage;}public String getAction() {return action;}public void setAction(String action) {this.action = action;}}

---------------------------------tag类结束------------------------------------------

 

---------------------------------tld文件开始------------------------------------------

<?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>JSTL tagTest core library</description>  <display-name>myTag</display-name>  <tlib-version>1.1</tlib-version>  <short-name>myf</short-name><!-- 用来引入时的名字-->  <uri>/muyunfei</uri><!-- 用来引入时的地址-->   <tag>    <description>        pageTag<!--描述 -->    </description>    <name>page</name><!--标签的名字-->    <tag-class>tag.mytag.page.PageTag</tag-class><!-- 对应的java类,要写全-->    <body-content>JSP</body-content>        <attribute><!-- 属性,可以多个-->        <name>curpage</name><!-- 自己在java文件中定义的私有变量 -->        <required>true</required> <!-- 标签是否必须该属性 -->        <rtexprvalue>false</rtexprvalue>  <!-- 是否支持表达式 -->    </attribute>    <attribute>        <name>action</name><!-- 自己在java文件中定义的私有变量 -->        <required>true</required> <!-- 标签是否必须该属性 -->        <rtexprvalue>true</rtexprvalue>  <!-- 是否支持表达式 -->    </attribute>  </tag></taglib>

---------------------------------tld文件结束------------------------------------------

 

---------------------------------freemaker文件*.ftl(page.ftl)     开始------------------------------------------

<div class="grid-outPagerImg"  onclick="endpage()"  style="float:right;padding-top: 0px">  <img  alt="最后页" border="0" src="${path}/images/last.png" style="cursor:hand;" onmouseout="this.src='${path}/images/last.png'" onmouseover="this.src='${path}/images/lasth.png'"></img></div><div class="grid-inPagerImg "  onclick="next()" style="float:right;padding-top: 1px">  <img  alt="后一页" border="0" src="${path}/images/next.png" style="cursor:hand;" onmouseout="this.src='${path}/images/next.png'" onmouseover="this.src='${path}/images/nexth.png'"></img></div><div class="grid-pagerText" style="float:right;padding-top: 2px"> 页/共<label id="totilepage"></label>页</div><input type="text"  id="curpage"  style="width: 20px;float:right"/><div class="grid-pagerText" style="float:right;padding-top: 2px"> 第 </div><div class="grid-inPagerImg " onclick="javascript:alert('${action}?curpage=${curpage}')"" style="float:right;padding-top: 1px">  <img  alt="前一页" border="0" src="${path}/images/prev.png"  style="cursor:hand;" onmouseout="this.src='${path}/images/prev.png'" onmouseover="this.src='${path}/images/prevh.png'"></img></div> <div class="grid-outPagerImg"  onclick="javascript:alert('${action}?curpage=${curpage}')" style="float:right;padding-top: 0px"><img  alt="第一页" border="0" src="${path}/images/first.png"  style="cursor:hand;" onmouseout="this.src='${path}/images/first.png'" onmouseover="this.src='${path}/images/firsth.png'"></img> </div> <div class="grid-fnCreatePagerInnerHtml" id="ajaxtablefnCreatePagerInnerHtml">    <div class="grid-allNumberImg grid-pagerText" style="color:#09f;width:85px;float:right;padding-top: 2px"> 共有记录<label id="totilerecode">${curpage}</label>条</div></div>

---------------------------------freemaker文件*.ftl(page.ftl)     结束------------------------------------------

 

---------------------------------jsp页面     开始------------------------------------------

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@taglib prefix="myf" uri="/muyunfei"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>My JSP 'myftag.jsp' starting page</title>  </head>    <body>    自定义控件使用: <br>    <myf:page action="/ftlhelloword" curpage="1"></myf:page>  </body></html>


---------------------------------jsp页面     结束------------------------------------------