<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"/>這種就可以了,所有值都正確填充了.  回復  更多評論
      

    主站蜘蛛池模板: 久久精品国产亚洲AV麻豆不卡| 国产成人免费片在线观看| 日本亚洲成高清一区二区三区| 美女黄频视频大全免费的| 免费一区二区三区四区五区 | 亚洲熟女综合色一区二区三区 | 久久精品国产亚洲网站| 黄色片免费在线观看| 亚洲AV无码久久精品狠狠爱浪潮| 巨胸喷奶水www永久免费| 亚洲国产精品一区第二页| 久久香蕉国产线看免费| 亚洲综合区图片小说区| 成人女人A级毛片免费软件| 亚洲熟妇av午夜无码不卡 | 日韩在线看片免费人成视频播放| 亚洲av无码兔费综合| 亚洲精品高清一二区久久| 中文字幕视频免费在线观看| 久久精品国产亚洲AV网站| 国产h视频在线观看免费| 美女被免费网站在线视频免费| 久久精品国产亚洲5555| 久久w5ww成w人免费| 亚洲熟妇自偷自拍另欧美| 亚洲AV无码乱码精品国产| 嫩草成人永久免费观看| 亚洲一欧洲中文字幕在线| 免费a级黄色毛片| 久久免费视频观看| 亚洲中字慕日产2020| 亚洲av高清在线观看一区二区| 久久精品免费视频观看| 亚洲色大成网站WWW国产| 亚洲色精品88色婷婷七月丁香 | 国产一级a毛一级a看免费视频| 久久综合亚洲色一区二区三区| 噜噜嘿在线视频免费观看| 女同免费毛片在线播放| 亚洲色在线无码国产精品不卡| 国产成人毛片亚洲精品|