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

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

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

    JAVA

    人生若只如初見,何事秋風悲畫扇。

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      50 隨筆 :: 25 文章 :: 157 評論 :: 0 Trackbacks

      在Struts應用中,到JSP頁面上顯示下拉列表框應該是常有的事。
      在基于是Struts的MVC框架中顯示下拉框,有好些方法,用自定義標簽庫就是其中之一。

      若我們的此下拉框是放在基于HtmlForm中的。Struts可以通過ActionForm來保存其歷史記錄(不排除我們?nèi)藶榈亟o此ActionForm清理一下)。然而此自定義標簽庫卻沒有此功能!因為它沒有通過過ActionForm中的字段來保存其記錄。所以選擇的時候可以根據(jù)自己的需要來定(我覺得在ActionForm中處理List列表框真的是一件非常龐大的工程:) )。

      JSP中對標簽的應用:

    <% @?taglib?uri = " /WEB-INF/self-html.tld " ?prefix = " test " ? %>
    < div? class ="formitem" >
    ??????
    < span? class ="parameter_name" > 所屬欄目: </ span >
    ??????
    < span? class ="parameter_value" >
    ??????
    < test:category? name ="dto.id" ?type ="17" />
    ??????
    </ span >
    ?????
    </ div >

      
      web.xml配置文件中:

    <!-- ?self?Tag?Library?Descriptors? -->
    ??
    < taglib >
    ????
    < taglib-uri > /WEB-INF/self-html.tld </ taglib-uri >
    ????
    < taglib-location > /WEB-INF/self-html.tld </ taglib-location >
    ??
    </ taglib >
    self-html.tld定義:
    < taglib >
    ?
    < tlibversion > 1.0 </ tlibversion >
    ?
    < jspversion > 1.1 </ jspversion >
    ?
    < shortname > netedu </ shortname >
    ??
    ?
    < tag >
    ??
    < name > category </ name >
    ??
    < tagclass > com.CategoryTag </ tagclass > ?
    ??
    < bodycontent > empty </ bodycontent >
    ??
    < info > tag?here </ info > ??
    ??
    < attribute >
    ??
    < name > name </ name >
    ??
    < required > false </ required >
    ??
    < rtexprvalue > false </ rtexprvalue >
    ??
    </ attribute >
    ??
    < attribute >
    ??
    < name > id </ name >
    ????
    ?
    </ tag >
    </ taglib >

      以后自己就有什么擴展的需要就是在這兒加參數(shù)了!


      總算是到了標簽庫的定義的地方了:

    /**
    ?*?
    @author ?test?
    ?
    */

    public ? class ?CategoryTag? extends ?TagSupport? {
    ?
    /* ?(non-Javadoc)
    ?????*?@see?javax.servlet.jsp.tagext.Tag#doStartTag()
    ?????
    */

    ????
    public ? int ?doStartTag()? throws ?JspException? {
    ????????
    // ?TODO?Auto-generated?method?stub
    ???????? try ? {
    ????????????JspWriter?out?
    = ?pageContext.getOut();
    ????????????
    // jspwriter是一個隱含對象,用于向jsp網(wǎng)頁輸出內(nèi)容。輸出的目標由
    ????????????CategoryManager?manager? = ?getManager();
    ????????????List?options
    = null ;
    ????????????
    ????????????
    if (type == Constants.SORT_VALUE_ARCHIVE_YEAR)
    ????????????????options
    = getArchiveYear();
    ????????????
    if (options == null || options.size() == 0 )
    ????????????????options
    = UMParameterUtil.getParameters(type);
    ????????????
    ????????????
    if (options == null || options.size() == 0 )
    ???????????????options
    = ?manager.getCategorys(type);
    ????????????
    ????????????BaseCategoryDTO?dto;
    ????????????ParametersDTO?param;
    ????????????Object?o?
    = ? null ;

    ????????????
    if ?(bean? != ? null )
    ????????????????????o?
    = ?RequestUtils.lookup(pageContext,?bean,?property,?scope);
    ???????????
    ????????????
    if ?(o? != ? null ? && ?((? ! (o? instanceof ?Integer)) && (? ! (o? instanceof ?Long)) && ?( ! (o? instanceof ?List)) && ?( ! (o?

    instanceof ?Long[]))?))
    ????????????????????
    throw ? new ?JspException(
    ????????????????????????????
    " bean?or?property?must?be?instanceof?Long?or?List " );
    ????????????
    ????????????out.print(
    " <select? " ? + ?TaglibUtil.attrFormat( " name " ,?name));
    ????????????out.print(TaglibUtil.attrFormat(
    " id " ,?id));
    ????????????out.print(TaglibUtil.attrFormat(
    " multiple " ,?multiple));
    ????????????out.print(TaglibUtil.attrFormat(
    " class " ,?styleClass));
    ????????????out.print(TaglibUtil.attrFormat(
    " size " ,?String.valueOf(size)));
    ????????????out.print(TaglibUtil.attrFormat(
    " onchange " ,?onchange));
    ????????????out.print(TaglibUtil.attrFormat(
    " style " ,?style));
    ????????????out.print(TaglibUtil.attrFormat(
    " disable " ,?disable));
    ????????????out.print(
    " > " );
    ????????????
    if ?(showAll)?out.print( " <option?value=-1>不限</option> " );
    ????????????
    if ?(showNull)?out.print( " <option?value=''></option> " );
    ????????????????printOption(out,?options,?o);
    ??out.print(
    " </select> " );
    ?}
    ? catch ?(IOException?ioException)? {
    ????????????
    throw ? new ?JspException(ioException.getMessage());
    ????????}
    // catch
    ???????? return ?(SKIP_BODY);
    ????????
    // return?super.doStartTag();
    ????}



      注:
      有options= manager.getCategorys(type);其中manager是CategoryManager類。此方法返回的一個List就是下拉框的值。具體實現(xiàn)可由我們自己來定義好了!記得在JSP中也有<test:category name="dto..id" type="17"/>,其中的type="17"(比如說可以是傳一個DB中的一個表的一個外鍵)就是此方法中的初始化參數(shù)值了(關于此標簽庫的定義的一些setter and getter方法中也舍了).既然是庫當然要通用。這個type就是通用的一個關鍵入口,不過顯然這樣一樣可讀性打了幾分折扣。

      TaglibUtil.attrFormat("name", name)的方法如下:

    public ? class ?TaglibUtil? {

    ?
    public ? static ?String?attrFormat(String?attrName,?Object?attrValue)? {
    ?????
    if ?(attrValue != null )
    ?????????
    return ? " ? " ? + ?attrName? + ? " = " ? + ? " \ "" ?+?attrValue?+? " \ "" ;
    ?????
    else
    ?????????
    return ? " ? " ;
    ?}

    }


      還有一個就是printOption,這個方法應該比較重要了。它負責生成了列表框的選擇的值與名稱。如:

    ? if ?( ! excludeFlag)? {
    ????????????out.print(
    " <option? "
    ????????????????????
    + ?TaglibUtil.attrFormat( " value " ,?id
    ????????????????????????????.toString()));
    ????????????out.println(TaglibUtil.attrFormat(
    " sysValue " ,?sysValue));
    ????????????
    if (o != null ) {
    ????????????????
    if (o? instanceof ?Long) {
    ????????????????????
    if ?(id.equals(o))?out.print( " selected? " );
    ????????????????}

    ????????????????
    else
    ????????????????????
    if (o? instanceof ?List) {
    ????????????????????????
    if ?(((List)o).contains(id))?
    ????????????????????????????out.print(
    " selected? " );??
    ????????????????????}
    else ?
    ????????????????????????
    if (o? instanceof ?Long[]) {
    ????????????????????????????
    if (isSelected(id,(Long[])o))
    ????????????????????????????????out.print(
    " selected? " );?
    ????????????????????????}

    ????????????}

    ???????????
    // ?if?(dto.getId().equals(o))?out.print("selected?");
    ????????????out.print( " > " );
    ????????????out.print(name);
    ????????????out.print(
    " </option> " );
    ????????}


      不要郁悶id是如何來的。當然是從options= manager.getCategorys(type)中來的了。

      也許說得不是太詳細,代碼也有些殘缺。不過實現(xiàn)過程基本全在這里了。我覺得它非常棒,直到我用到它的onchange,style時!簡直在直接跟使用html中的list一樣!

       out.print(TaglibUtil.attrFormat("size",?String.valueOf(size)));
    ????????????out.print(TaglibUtil.attrFormat(
    "onchange",?onchange));
    ????????????out.print(TaglibUtil.attrFormat(
    "style",?style));
    ????????????out.print(TaglibUtil.attrFormat(
    "disable",?disable));


      至少給我們指明了一些自定義標簽庫的經(jīng)驗!

    posted on 2006-04-06 18:55 Jkallen 閱讀(5954) 評論(8)  編輯  收藏 所屬分類: JEE學習其它開源

    評論

    # re: Struts自定義標簽庫-----列表顯示 2006-12-18 10:31 knight[匿名]
    代碼不全,不知所云  回復  更多評論
      

    # re: Struts自定義標簽庫-----列表顯示 2007-07-11 16:43 darkdragonking
    干嗎不把全部代碼弄上呢,出于保密?
    實話實說,
    寫的不是很明白
    但是感謝摟主作出的貢獻all the same  回復  更多評論
      

    # re: Struts自定義標簽庫-----列表顯示 2007-09-03 18:27 臨沂師院
    寫的更明白些會更好了,不果頂一下  回復  更多評論
      

    # re: Struts自定義標簽庫-----列表顯示 2008-01-13 11:26 alonely
    感覺概念說的還不是很清楚
    http://www.3y11.com  回復  更多評論
      

    # re: Struts自定義標簽庫-----列表顯示 2008-10-02 18:03 力五
    寫的還不錯!那位有自定義標簽的一些運行順序圖,發(fā)給我啊!謝謝
    QQ:105677211  回復  更多評論
      

    # re: Struts自定義標簽庫-----列表顯示[未登錄] 2008-10-03 07:34 藍天
    剛剛畢業(yè)之時起的筆,現(xiàn)在一些特殊原因,不能再發(fā)了...  回復  更多評論
      

    # re: Struts自定義標簽庫-----列表顯示 2009-06-07 09:54 馬馬虎虎,還需努力
    馬馬虎虎,還需努力  回復  更多評論
      

    # re: Struts自定義標簽庫-----列表顯示[未登錄] 2013-07-11 00:13 Randy
    如果可能,麻煩把完整的源碼發(fā)給我下:362563734@qq.com
    感激不盡!~  回復  更多評論
      

    主站蜘蛛池模板: 色吊丝最新永久免费观看网站| 免费一级e一片在线播放| 亚洲人成欧美中文字幕| 免费观看午夜在线欧差毛片| 拍拍拍无挡免费视频网站| 精品日韩亚洲AV无码一区二区三区 | 亚洲天堂免费在线| 四虎影视精品永久免费| 免费在线看黄网站| 亚洲大码熟女在线观看| 亚洲成a人片在线观看无码| 在线免费观看一区二区三区| 三级网站在线免费观看| 亚洲精品天堂无码中文字幕| 亚洲精品无码成人片久久| 成年女人毛片免费播放视频m| 国产精品免费视频观看拍拍 | 一进一出60分钟免费视频| 精品亚洲成a人片在线观看| 亚洲av午夜精品一区二区三区| 最近2019中文字幕免费大全5| 黄网站在线播放视频免费观看| 久久亚洲AV成人无码电影| 免费大香伊蕉在人线国产| 精品国产sm捆绑最大网免费站| 污视频网站免费在线观看| 亚洲人成电影网站久久| 亚洲色图在线播放| 在线精品亚洲一区二区小说| 日韩在线看片免费人成视频播放| 色欲色香天天天综合网站免费| 在线观看亚洲视频| 亚洲字幕AV一区二区三区四区| 亚洲AV乱码久久精品蜜桃| 久久久久亚洲AV无码专区网站| 免费的一级片网站| 性短视频在线观看免费不卡流畅 | 免费国产污网站在线观看不要卡| 亚洲成a人片77777群色| 亚洲av无码片在线播放| 亚洲精品视频免费观看|