<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    sclsch

    java備忘

    BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
      10 Posts :: 0 Stories :: 6 Comments :: 0 Trackbacks
        下拉框是網(wǎng)頁(yè)的重要元素,動(dòng)態(tài)取數(shù)據(jù)并不難,通常的思路是在action中取數(shù)據(jù),然后把數(shù)據(jù)放到request中,最后在頁(yè)面上用標(biāo)簽遍歷數(shù)據(jù),但寫多了,是不是很煩,我想做一個(gè)通用的下拉框標(biāo)簽,只要指明了業(yè)務(wù)接口,并且該接口實(shí)現(xiàn)了特定方法,就可以了。
        首先定義一個(gè)接口,用來取下拉框的數(shù)據(jù)。
       
       1package com.ssh.tag;
       
    2.
       
    3import java.util.List;
       
    4.
       
    5/** 
       6.  * 
    @author 孫程亮 E-mail:sclsch@188.com 
       7.  * 
    @version 創(chuàng)建時(shí)間:Oct 27, 2008 6:59:05 PM
       8.  * 取得下拉框數(shù)據(jù)接口 
       9.  
    */
      
    10public interface SelectorInterface {
      
    11.   public List getVableValueList();
      
    12. }
       
        如果哪個(gè)業(yè)務(wù)層service需要增加下拉框的功能,就需要實(shí)現(xiàn)它。
    例如:
      
       1package com.ssh.entity.board.service;
       
    2.
       
    3import java.util.ArrayList;
       
    4import java.util.List;
       
    5.
       
    6import com.ssh.common.vo.ValueLabelBean;
       
    7import com.ssh.entity.board.dao.IBoardDao;
       
    8import com.ssh.entity.board.model.Board;
       
    9import com.ssh.tag.SelectorInterface;
      
    10import com.sun.java_cup.internal.internal_error;
      
    11.
      
    12/**
      13.  * 
    @author 孫程亮 E-mail:sclsch@188.com
      14.  * 
    @version 創(chuàng)建時(shí)間:Sep 4, 2008 6:36:22 PM
      15.  
    */
      
    16public class BoardServiceImpl implements IBoardService,SelectorInterface{
      
    17.     private IBoardDao boardDao;
      
    18.
      
    19.     public void addBoard(Board b) {
      
    20.        boardDao.addBorad(b);
      
    21.     }
      
    22.
      
    23.     public IBoardDao getBoardDao() {
      
    24.         return boardDao;
      
    25.     }
      
    26.
      
    27.     public void setBoardDao(IBoardDao boardDao) {
      
    28.         this.boardDao = boardDao;
      
    29.     }
      
    30.
      
    31.     public List getAllBoards() {
      
    32.         return this.boardDao.getAllBoards();
      
    33.     }
      
    34.     /**
      35.      * 用來實(shí)現(xiàn)下拉框的方法,
      36.      * 把下拉數(shù)據(jù)存放在ValuLabelBean中,再存放在list中返回
      37.      * 給自定義標(biāo)簽。
      38.      * 
    @return 下拉數(shù)據(jù)集合
      39.      
    */
      
    40.     public List getVableValueList() {
      
    41.         List list = this.boardDao.getAllBoards();
      
    42.         List valueLableList = new ArrayList();
      
    43.         for(int i=0;i<list.size();i++){
      
    44.           Board board = (Board)list.get(i);
      
    45.           ValueLabelBean vlb = new ValueLabelBean();
      
    46.           vlb.setValue(board.getId().toString());
      
    47.           vlb.setLabel(board.getName());
      
    48.           valueLableList.add(vlb);
      
    49.         }
      
    50.         return valueLableList;
      
    51.     }
      
    52. }
        注意數(shù)據(jù)必須放在ValueLabelBean中,label表示下拉框顯示的數(shù)據(jù),value表示下拉框的value值,下面是ValueLabelBean
    這個(gè)bean:
       1package com.ssh.common.vo;
       
    2.
       
    3import java.io.Serializable;
       
    4.
       
    5/**
       6.  * 
    @author 孫程亮 E-mail:sclsch@188.com
       7.  * 
    @version 創(chuàng)建時(shí)間:Oct 27, 2008 7:00:36 PM
       8.  
    */
       
    9public class ValueLabelBean implements Serializable {
      
    10.     private String value;
      
    11.     private String label;
      
    12.
      
    13.     public String getValue() {
      
    14.         return value;
      
    15.     }
      
    16.
      
    17.     public void setValue(String value) {
      
    18.         this.value = value;
      
    19.     }
      
    20.
      
    21.     public String getLabel() {
      
    22.         return label;
      
    23.     }
      
    24.
      
    25.     public void setLabel(String label) {
      
    26.         this.label = label;
      
    27.     }
      
    28. }

       下面就是寫tag了,暫時(shí)設(shè)置了三個(gè)屬性 tagId,serviceBean和title,
    tagId:select 的 id 屬性值。
    serviceBean:對(duì)應(yīng)于spring容器中service的id。
    title:select的默認(rèn)選中項(xiàng)。
       1package com.ssh.tag;
       
    2.
       
    3import java.io.IOException;
       
    4import java.lang.reflect.Method;
       
    5import java.util.List;
       
    6.
       
    7import javax.servlet.jsp.JspException;
       
    8import javax.servlet.jsp.tagext.TagSupport;
       
    9.
      
    10import org.springframework.context.support.AbstractApplicationContext;
      
    11import org.springframework.util.StringUtils;
      
    12import org.springframework.web.context.WebApplicationContext;
      
    13import org.springframework.web.context.support.WebApplicationContextUtils;
      
    14import org.springframework.web.util.JavaScriptUtils;
      
    15import com.ssh.common.util.*;
      
    16import com.ssh.entity.board.service.IBoardService;
      
    17import com.sun.org.apache.xml.internal.utils.ObjectPool;
      
    18import com.ssh.common.vo.*;
      
    19import com.ssh.tag.*;
      
    20/**
      21.  * 
      22.  * 
    @author 孫程亮 E-mail:sclsch@188.com
      23.  * 
    @version 創(chuàng)建時(shí)間:Oct 25, 2008 10:22:18 AM
      24.  
    */
      
    25public class SelectorTag extends TagSupport {
      
    26.     
      
    27.     private String tagId;      //select's id
      28.     private String serviceBean;//service
      29.     private String title;      //select's title
      30.     
      
    31.     public int doEndTag() throws JspException {
      
    32.       WebApplicationContext applicationContext =  WebApplicationContextUtils.getWebApplicationContext(pageContext.getServletContext());
      
    33.       SelectorInterface selectorInterface = (SelectorInterface)applicationContext.getBean(serviceBean);
      
    34.       List list1 = selectorInterface.getVableValueList();
      
    35.       //List list = ServiceLocator.getSelectorService(serviceBean).getVableValueList();
      36.       StringBuffer sBuffer = new StringBuffer();
      
    37.       sBuffer.append("<select id='"+this.tagId);
      
    38.
      
    39.       sBuffer.append("'>");
      
    40.       if(!StringUtil.isBlank(title)){
      
    41.           sBuffer.append("<option value='-1' selected>"+title+"</option>");
      
    42.       }
      
    43.       for(int i=0;i<list1.size();i++){
      
    44.         ValueLabelBean vlb =  (ValueLabelBean)list1.get(i);
      
    45.         sBuffer.append("<option value='"+vlb.getValue()+"'>"+vlb.getLabel()+"</option>");
      
    46.       }
      
    47.       sBuffer.append("</select>");
      
    48.       try {
      
    49.         pageContext.getOut().println(sBuffer.toString());
      
    50.     } catch (IOException e) {
      
    51.         // TODO Auto-generated catch block
      52.         e.printStackTrace();
      
    53.     }
      
    54.       return EVAL_PAGE;
      
    55.     }
      
    56.     public void setTagId(String tagId) {
      
    57.         this.tagId = tagId;
      
    58.     }
      
    59.     public void setServiceBean(String serviceBean) {
      
    60.         this.serviceBean = serviceBean;
      
    61.     }
      
    62.     public void setTitle(String title) {
      
    63.         this.title = title;
      
    64.     }
      
    65. }

    在標(biāo)簽中可以用WebApplicationContextUtils來得到context,曾一度起了彎路,想到用一個(gè)工具類加載容器,倒也能實(shí)現(xiàn),也想到用反射,但是行不通的。 看來變通一下,可能會(huì)少走很多彎路。
       下面是tld文件:
    <?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>1.0</jsp-version>
         <short-name>sclschTag</short-name>
         <description>sclschTag</description>

         <tag>
             <name>selectorTag</name>
             <tag-class>com.ssh.tag.SelectorTag</tag-class>
             <body-content>JSP</body-content>
             <description>
             </description>
             <attribute>
                 <name>tagId</name>
                 <required>true</required>
                 <rtexprvalue>true</rtexprvalue>
             </attribute>

             <attribute>
                 <name>serviceBean</name>
                 <required>true</required>
                 <rtexprvalue>true</rtexprvalue>
             </attribute>
             <attribute>
                 <name>title</name>
                 <required>false</required>
                 <rtexprvalue>true</rtexprvalue>
             </attribute>
         </tag>

     </taglib>
    最后就剩頁(yè)面了:
      <%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding
    ="UTF-8"%>
     
    <%@ taglib uri="/WEB-INF/tld/selectorTag.tld" prefix="sclsch"%>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
     
    <head>
     
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     
    <title>mytag(sclsch@188.com)</title>
     
    </head>
     
    <body>
     
    <sclsch:selectorTag tagId='myid' title="--請(qǐng)選擇--" serviceBean="boardService" />
     
    </body>
     
    </html>

        好了,盡管這個(gè)tag很簡(jiǎn)陋,但為以后省了不少工,只要在業(yè)務(wù)層實(shí)現(xiàn)一個(gè)SelectorInterface接口,在頁(yè)面上擺個(gè)標(biāo)簽就可以了。我剛學(xué)標(biāo)簽的編寫,有什么不足請(qǐng)指正,如果有更好的設(shè)計(jì)一定告訴我額。


    posted on 2008-10-28 20:57 sclsch 閱讀(748) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲熟妇av午夜无码不卡| 毛片基地免费视频a| 亚洲欧美在线x视频| 亚洲国产成人久久精品影视| 免费在线观看理论片| 久久不见久久见中文字幕免费 | 人妻无码久久一区二区三区免费| 日本特黄特黄刺激大片免费| 污网站在线免费观看| 国产亚洲精品成人AA片| 亚洲精品午夜在线观看| 久久亚洲精品中文字幕三区| 亚洲精品无码专区久久同性男| 免费看少妇作爱视频| 成年免费大片黄在线观看岛国 | 亚洲日本中文字幕一区二区三区| 成人毛片18岁女人毛片免费看| 三年片在线观看免费观看大全动漫 | 亚洲aⅴ天堂av天堂无码麻豆| 亚洲国产成人超福利久久精品| 久久伊人久久亚洲综合| 亚洲熟妇丰满多毛XXXX| 中文字幕日韩亚洲| 99久久99久久免费精品小说| 好久久免费视频高清| 怡红院免费的全部视频| XXX2高清在线观看免费视频| 国产无限免费观看黄网站| 无码免费又爽又高潮喷水的视频| 污污视频网站免费观看| 欧洲乱码伦视频免费国产| 日韩精品无码免费视频| 日韩精品免费一线在线观看| 一级特黄特色的免费大片视频| 一级特级aaaa毛片免费观看| 免费看黄福利app导航看一下黄色录像| 国产精品亚洲一区二区三区| 免费看一级毛片在线观看精品视频 | 狼群影院在线观看免费观看直播| 真正全免费视频a毛片| 国产成人亚洲精品电影|