首页 > 代码库 > jsp-->self-defined tag with function tag in taglib

jsp-->self-defined tag with function tag in taglib

一.WEB-INFO下的*.tld自定义标签描述文件PAFTaglib.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">
    <tlib-version>1.1</tlib-version>
    <short-name>paf</short-name>
    <uri>http://paf.taglib</uri>   

    /**<function>可以让我们在jsp中直接调用某个方法,根据自定义的方法返回指定的值,兼容jstl标签,省去了在jsp中直接使用<%!%>来定义方法体再调用的繁琐.如果你用过el语言的话估计会很快上手,其实<function>标签 就是一个拥有方法体的el语言.注意:function所定义的方法必须需要是静态的,如果不是静态的话jstl是不能识别所定义的方法;不用再继承TagSupport、BodyTagSupport、SimpleTagSupport中的一个*/

    <function>
        <name>getParamByServerBeanByPageNameByParamName</name>

        <!--specified handle class, full path-->

        <function-class>com.hp.it.techasmts.web.util.TaglibUtil</function-class>

        <!--specified actual handle method in handle calss,full path-->

        /**在<function-signature>需要写完整的类名,假如是String类型的话就必须写成java.lang.String,不支持泛型的定义如java.util.List<java.lang.String>,eclipse会把<>当作xml的 格式来判断的,所以就省略该泛型的定义.*/

        <function-signature>java.lang.String getParamByPageNameByParamName(
            com.hp.it.techasmts.web.data.RequestUtilServerBean,
            java.lang.String, java.lang.String)
        </function-signature>
    </function>
    <function>
        <name>getParameterByRequestPageNameByParameterName</name>
        <function-class>com.hp.it.techasmts.web.util.TaglibUtil</function-class>
        <function-signature>java.lang.String getParameterByRequestPageNameByParameterName(
            com.hp.it.techasmts.web.data.RequestPagesViewHelper,
            java.lang.String, java.lang.String)
        </function-signature>
    </function>
</taglib>


二.实际的处理类和方法TaglibUtil

public class TaglibUtil {
    /**
     * @param target
     *            the target bean
     * @param pageName
     *            the param used in the target bean
     * @param paramName
     *            the param used in the target bean
     * @return the target method result
     */

    public static String getParamByPageNameByParamName(RequestUtilServerBean target, String pageName, String paramName) {
        return target.getParamByPageNameByParamName(pageName, paramName);
    }

    public static String getParameterByRequestPageNameByParameterName(RequestPagesViewHelper target, String pageName, String paramName) {
        return target.getParameterByRequestPageNameByParameterName(pageName, paramName);
    }
}


三.在web.xml中引入定义的tld文件

<!-- enable call the customized method in the JSTL/EL expression in PAF -->
<jsp-config>
    <taglib>
        <taglib-uri>http://paf.taglib</taglib-uri>
        <taglib-location>/WEB-INF/PAFTaglib.tld</taglib-location>
    </taglib>

    /**<jsp-property-group>定义了一组JSP的特性,这些特性实际上对应JSP的 page directive定义的特性,但通过<jsp-property-group>可以方便地对多个具有相同属性的JSP统一定义。*/

    <jsp-property-group>
        <description>
            Special property group for JSP Configuration JSP example.
        </description>
        <display-name>JSPConfiguration</display-name>
        <url-pattern>*.jsp</url-pattern>
        <el-ignored>false</el-ignored>
        <page-encoding>utf-8</page-encoding>

        <!--若为true,表示不支持<%scripting%>语法-->

        <scripting-invalid>false</scripting-invalid>

        <!--设置JSP网页的抬头,扩展名为.jspf-->

        <!--include-prelude>xxx.jspf</include-prelude>

        <!--设置JSP网页的结尾,扩展名为.jspf-->

        <include-prelude>xxx.jspf</include-prelude-->

    </jsp-property-group>

</jsp-config>


四.在jsp中使用自定义标签

引入标签:<%@ taglib prefix="paf" uri="http://paf.taglib"%>

使用:

<c:choose>
    <c:when test="${paf:getParameterByRequestPageNameByParameterName(requestPagesViewHelper,‘SELECT_CUSTOMER‘, ‘DEFAULT_CUSTOMER_SELECTION‘)==‘filterCustomer‘}">
        $.slideTab({defaultIndex:1});// select by filter customer is default
    </c:when>           
    <c:when test="${paf:getParameterByRequestPageNameByParameterName(requestPagesViewHelper,‘SELECT_CUSTOMER‘, ‘DEFAULT_CUSTOMER_SELECTION‘)==‘selectByFile‘}">
        $.slideTab({defaultIndex:2});// select by upload file is default
    </c:when>                  
    <c:when test="${paf:getParameterByRequestPageNameByParameterName(requestPagesViewHelper,‘SELECT_CUSTOMER‘, ‘DEFAULT_CUSTOMER_SELECTION‘)==‘selectBySAIDs‘}">
        $.slideTab({defaultIndex:3});// select by SAID is default
    </c:when>                   
    <c:otherwise>
        $.slideTab({defaultIndex:2});// select by upload file while the param has not be set
    </c:otherwise>
</c:choose>


本文出自 “六度空间” 博客,请务必保留此出处http://jasonwalker.blog.51cto.com/7020143/1434986