jsp中的自定義標籤的使用

自定義標籤可以直接從數據庫中取出數據直接傳遞到jsp頁面,不需要經過控制層,對於需要在頁

面上顯示的字典數據,使用自定義標籤提供了很大的方便。
自定義標籤需要三個部件,一個是數據層,查詢出數據。第二個是標籤的配置文件,第三個就是

在jsp頁面上引用了。
下面是我在一個例子:主要是從jsp頁面上傳遞值到後臺,然後將值作爲參數,在redis中查詢出

對應的值,然後返回到前臺。

public class RedisTag extends BodyTagSupport{

    private static final long serialVersionUID = 1L;
    
    //對應redis中的key
    private String redisKey;
    //對應redis中的field
    private String redisField;

    public String getRedisKey() {
        return redisKey;
    }

    public void setRedisKey(String redisKey) {
        this.redisKey = redisKey;
    }

    public String getRedisField() {
        return redisField;
    }

    public void setRedisField(String redisField) {
        this.redisField = redisField;
    }

    @Override
    public int doStartTag() throws JspException {
        return BodyTagSupport.EVAL_BODY_INCLUDE;
    }
    
    //從前臺傳過來3個值,分別爲需要輸出的標籤,key值和field值,field爲空則返回一個

map集合
     @Override
     public int doEndTag() throws JspException {
         //定義一個輸出到jsp的對象
         JspWriter out=this.pageContext.getOut();
         try{
         //從redis取出數據,兩種情況,一種是沒有field,則得到的是一個map集合,

一種是有field,返回的是一個字符串數據
         if(StringUtils.isNotEmpty(redisField)){
             Cache cache=RedisFactory.getRedisBean(RedisType.VALUE);
             //將redisField拼接起來
             redisField="value:"+redisField;
             String value=cache.getKeyValue(redisKey, redisField);
             out=this.pageContext.getOut();
             //輸出值到jsp頁面
             out.print(value);
         }else{
             Cache cache=RedisFactory.getRedisBean(RedisType.MAP);
             @SuppressWarnings("unchecked")
            Map<String, String> redisMap=(Map<String, String>)

cache.getKeyMap(redisKey);
             //循環遍歷map集合
             for(String s:redisMap.keySet()){
                 out.print("<option value="+s.substring(s.indexOf

(":")+1)+">"+redisMap.get(s)+"</option>");
              }
         }
         }catch(Exception e){
             LogFactory.getLog().info(e.getMessage());
         }
         return BodyTagSupport.SKIP_BODY;
     }
}

自定義標籤的配置文件(應該位於WEB-INF下的tags文件夾下面)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
        "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
    <tlib-version>1.0</tlib-version>
    <jsp-version>2.0</jsp-version>
    <short-name>redis</short-name>
    <!-- backGroundTag -->
    <uri>http://www.wmx.tag/redis</uri>
    <tag>
        <name>getValue</name>
        <tag-class>com.sanlen.util.RedisTag</tag-class>
        <body-content>JSP</body-content>
        <attribute>
            <name>redisKey</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue><!-- 是否支持惡劣表達式 -->
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <name>redisField</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue><!-- 是否支持惡劣表達式 -->
            <type>java.lang.String</type>
        </attribute>
    </tag>
</taglib>

前臺的jsp頁面使用:
<%@taglib uri="http://www.wmx.tag/redis" prefix="redis"%>
<p>
<!--此處傳遞的redisKey會傳遞到數據層中,然後整個返回一個value值-->
<redis:getValue redisKey="dc_dictionary:dictionary_id:101" redisField="vulue:

${dataSource.type}"></redis:getValue>
</p>
發佈了38 篇原創文章 · 獲贊 13 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章