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

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

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

    Tin's Blog

    You are coming a long way, baby~Thinking, feeling, memory...

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

    原本javaeye有這么一篇帖子“在WebWork2 Action中如何自動設置Array、List、Map”,是moxie大哥寫的。
    http://forum.javaeye.com/viewtopic.php?t=8770

    但是已經(jīng)是2004年11月的文章了,在webwork 2.2 b4中,XWorkList和XWorkMap已經(jīng)是deprecated狀態(tài)了,當時我就一頭霧水,也沒找到什么好的線索。
    去java.net下載了XWork的最新代碼,看到了其中的注釋,說這個工作已經(jīng)可以自動完成了。
    又幾經(jīng)周折,才算搞明白先在如何讓List、Map等工作起來,給予2.2 b4和b5工作正常:

    下面簡單介紹一下:
    1、如果要將值映射到pojo的collection,則需要使用conversion功能。
    如我又一個Action,叫testAction:

    public class testAction extends ActionSupport 
            
    private Collection smoeAttrs = null;//(使用webwork自動負值,應有對應getter和setter) 
            private IDeptJgzTjkEcoAttDAO ecoAttDAO = null;//(改DAO使用Spring注入,應有相應setter) 

                
    public String execute() throws Exception 
                    
    if (log.isDebugEnabled()) 
                            log.debug(
    "performing execute() method!"); 
                    }
     
                    
                    
    //持久化collection里面的pojo 
                    for (Iterator iterator = smoeAttrs.iterator(); iterator.hasNext();) 
                                SomeAttr someAttr 
    = (SomeAttr) iterator.next(); 
                                ecoAttDAO.saveOrUpdate(someAttr, someAttr.getId()); 
                    }
     
                    
                           
    return Action.SUCCESS; 
                }
     
    }

    對應一個pojo:

    package org.tin.test; 

    public class SomeAttr implements Serializable 

            
    /** The composite primary key value. */ 
            
    private java.lang.Long id; 

            
    private java.lang.Float fild1; 
            
    private java.lang.String fild2; 
            
    private java.util.Date fild3; 

            
    /* 
                    
                    對應的getter和setter 
            
    */
     
    }

    可以看到,上面的Action聲明的時候沒有任何涉及到XWorkList的地方(moxie介紹的那種風格),也就是說現(xiàn)在webwork并不知道Collection里面放的pojo的類型。這就是Webwork目前的高明之處,這樣的代碼非常干凈。但是如果要自動設定Collection的值,訪問到這些Pojo,則一定要知道Pojo的類型,Webwork如何做呢?
    通過-conversion配置。
    需要在對應該才那個testAction.java的相同目錄寫一個testAction-conversion.properties文件(格式就是Action名字+“-conversion.properties”)。
    文件里面注明:
    Element_someAttrs = org.tin.test.SomeAttr (以前版本曾經(jīng)用過Collection、Map分開,但是現(xiàn)在不管什么類型,都用Element)
    格式就是“Element_”+Action中Collection的名字+“=”+你的pojo的完整類名

    如此配置后,自動設置值的時候就可以知道你的pojo的類型了,很干凈。

    下面一小段由于我接觸Webwork不久,所以是個很初級的經(jīng)驗,如果需要則自?。?
    回憶moxie帖子中的重要的部分,在post到相應action的頁面的form中,input要遵循這樣的命名:
    對應剛才所說的那個pojo:

    <form> 
            
    <input  name="someAttrs[0].fild1" value="45555.6" id="xxx11" /> 
            
    <input  name="someAttrs[0].fild2" value="test" id="xxx12" /> 
            
    <input  name="someAttrs[0].fild3" value="2006-01-05" id="xxx13" /> 
            
    <input  name="someAttrs[1].fild1" value="45555.6" id="xxx21" /> 
            
    <input  name="someAttrs[1].fild2" value="test" id="xxx22" /> 
            
    <input  name="someAttrs[1].fild3" value="2006-01-05" id="xxx23" /> 
            
    <input  name="someAttrs[2].fild1" value="45555.6" id="xxx31" /> 
            
    <input  name="someAttrs[2].fild2" value="test" id="xxx32" /> 
            
    <input  name="someAttrs[2].fild3" value="2006-01-05" id="xxx33" /> 
    </form>

    如何輸出?很簡單,在列表頁中: 

    <ww:iterator value="someAttrs" status="someAttrsIter"> 
    <tr> 
            
    <td> 
                    
    <ww:hidden name="someAttrs[%{#someAttrsIter.index}].id" value="%{id}"/> 
                    
    <ww:textfield name="someAttrs[%{#someAttrsIter.index}].fild1" value="%{fild1}"/></td> 
            
    <td><ww:textfield name="someAttrs[%{#someAttrsIter.index}].fild2 value="%{fild2}"/></td> 
            
    <td><ww:textfield name="someAttrs[%{#someAttrsIter.index}].fild3" value="%{fild3}"/></td> 
    </tr> 
    </ww:iterator>


    即可以,因為iteratror這個tag支持iteratroStatus這個東西,用它可以獲取index、isOdd等信息,很方便。

    配合

    <action name="saveAction" class="testAction"> 
            
    <result name="success" type="redirect">/loadByInf.action?id=${someAttrOwner.id}</result> 
    </action>

    則很容易的實現(xiàn)對Collection的CRUD。正好用到了ONGL的集中基本訪問方式:#、%{}、${}

    以上內(nèi)容,錯漏難免。因為今天終于可以偷閑,趕緊結繩記之。歡迎大家討論更簡便的方法。

     

    posted on 2006-02-16 21:19 Tin 閱讀(3101) 評論(9)  編輯  收藏 所屬分類: Webwork相關

    評論

    # re: webwork 2.2 中如何給Collection賦值 2006-02-16 23:44 李李
    給你補充一點,-conversion.properties設定不局限于webwork action,支持任意pojo,意味著可以支持無限層次的Collection自動賦值,如:
    root.one[0].two[0].three[0]
    root.one[0].two[0].three[1]
    ...
    root.one[n].two[n].three[n]
      回復  更多評論
      

    # re: webwork 2.2 中如何給Collection賦值 2006-02-17 08:38 Tin
    @李李
    謝謝。對pojo的conversion.properties應該存放在哪個目錄對應呢?
    如果pojo和action都支持conversion真得很方便。  回復  更多評論
      

    # re: webwork 2.2 中如何給Collection賦值 2006-02-17 10:44 李李
    pojo的package下。
    classname-conversion.properties  回復  更多評論
      

    # re: webwork 2.2 中如何給Collection賦值 2006-08-07 12:04 lxl
    @李李
    pojo的package下。
    classname-conversion.properties
    ————————————————
    那么里面的內(nèi)容如何寫呢,我要訪問action.first.items里面的bean,可是不知道該怎么寫配置文件  回復  更多評論
      

    # re: webwork 2.2 中如何給Collection賦值 2006-09-09 16:48 coolfish
    你這個例子用的攔截器是哪個?defaultStack?我的怎么必須用到workflow那個攔截器才行啊?
      回復  更多評論
      

    # re: webwork 2.2 中如何給Collection賦值 2006-09-09 16:52 coolfish
    還有我試了試: user---->多個Address

    然后頁面里寫 user.address[0].street

    properties: 寫Element_user.address = org.fish.ww2.model.Address

    這樣也沒取到值?  回復  更多評論
      

    # re: webwork 2.2 中如何給Collection賦值 2006-09-10 22:30 Tin
    這個和攔截器沒有關系,是XWork的內(nèi)置功能。你可以看看Type Conversion的文檔。如果不行你先看看你所使用的Webwork的版本,Element_xxx這個語法好像是從2.2.1開始支持的。  回復  更多評論
      

    # re: webwork 2.2 中如何給Collection賦值 2006-09-11 08:52 coolfish007
    我用的是2.2.2這個版本,如果不用Elemnt_時webwork會在log里警告老的用法過時.現(xiàn)在頁面的對象可以填充到collection中了,但就是從collection中第二個對象開始一些field的值為null(而頁面是寫了值的)比如頁面上:

    <input name="fruites[0].nameD" value="apple" id="c1">Apple
    <input name="fruites[0].produceArea" value="CN" id="c12">Apple
    <input name="friutes[1].nameD" value="orangle" id="c2">Orangle
    <input name="fruites[1].produceArea" value="USA" id="c22">Apple
    <input name="friutes[2].nameD" value="banana" id="c3">Orangle
    <input name="fruites[2].produceArea" value="UK" id="c32">Apple


    Action中引用的private List fruites;
    List里除了第一個對象的name正確賦值之外,剩下兩個都是null,而produceArea賦值正確. 真是好奇怪

    還有,關于攔截器,如果我在xwork.xml只引用"param"時,list中什么都沒有.  回復  更多評論
      

    # re: webwork 2.2 中如何給Collection賦值 2006-09-11 09:48 coolfish007
    現(xiàn)在可以了,我把頁面上的<input ...>換成<ww:textfield label="%{getText('Apple')}" name="fruites[0].nameD" value="apple"/>這種就可以了,所有值都正確填充了.  回復  更多評論
      

    主站蜘蛛池模板: a级毛片毛片免费观看久潮喷| 亚洲综合一区国产精品| 一区二区免费国产在线观看| 日本特黄特黄刺激大片免费| 亚洲精品无码专区| 日韩高清在线免费观看| 综合一区自拍亚洲综合图区| 国产jizzjizz视频全部免费| 男女超爽视频免费播放| 日韩亚洲国产二区| 一级做a爰黑人又硬又粗免费看51社区国产精品视 | 亚洲va精品中文字幕| 日韩在线播放全免费| 亚洲午夜福利在线视频| 国产成人免费手机在线观看视频| 亚洲AV女人18毛片水真多| 亚洲精品国产自在久久 | 久久国产乱子伦精品免费不卡| 中文字幕亚洲综合久久2| 国产成人精品免费视频动漫 | 日韩精品免费在线视频| 亚洲性色成人av天堂| 全免费a级毛片免费看无码| 色婷婷亚洲一区二区三区| 亚洲午夜成人精品电影在线观看| 两性色午夜免费视频| 久久亚洲精品成人无码网站| 欧美大尺寸SUV免费| 国产成人+综合亚洲+天堂| 亚洲一区无码中文字幕| 久久午夜夜伦鲁鲁片免费无码影视| 在线aⅴ亚洲中文字幕| 亚洲精品老司机在线观看| 无码成A毛片免费| 亚洲AV无码XXX麻豆艾秋| 亚洲一区二区三区无码影院| 免费A级毛片无码A∨中文字幕下载| 亚洲依依成人亚洲社区| 狠狠亚洲婷婷综合色香五月排名| 精品国产免费人成电影在线观看 | 中文字幕乱理片免费完整的|