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

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

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

    javaGrowing

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      92 隨筆 :: 33 文章 :: 49 評(píng)論 :: 0 Trackbacks
    ?在 Strust 中,我們可能經(jīng)常要在 ActionForm 中使用其他 JavaBean 作為屬性類型,這里就存在著如何使用好這些屬性與 HTML Form 之間的數(shù)據(jù)交換,下面我們就這些問題做一講解。

    如在用戶注冊(cè)界面中,我們通常會(huì)將用戶的聯(lián)系方式形成一個(gè)單獨(dú)的新的 Class ,如 Contact ,包含以下屬性:電話 (tel) ,手機(jī)(cell) , Email(email) , QQ(qq) ,通信地址 (adress) 等等,這樣條理也比較清晰,以下是這個(gè)ActionForm 的部分代碼:

    public class RegisterForm extends ActionForm

    {

    private Integer id;

    private String logonName;

    private String realName;

    private Contact contact=new Contact();

    ………..

    }

    在這里我們需要將 Contact 實(shí)例化(在 reset 函數(shù)中需要重新實(shí)例化),這主要因?yàn)?Struts 的機(jī)制:如我們將 HTML 的Form 元素(如 email )值傳給 ActionForm , Struts 需要執(zhí)行的操作是getContact().setEmail(String email) ,如果這時(shí)返回的 contact 對(duì)象為空的話,那么賦值如何進(jìn)行,而且Struts 也不會(huì)知道如何去實(shí)例化 Contact ,有時(shí)這些 JavaBean 的類型有可能是接口,實(shí)例化更是未知,所以關(guān)于JavaBean 類型在 ActionForm 中的實(shí)例化,你需要自行完成,而且必須完成。至于在實(shí)際操作中判斷 JavaBean是否被進(jìn)行過相關(guān)操作(不再是初始狀態(tài)),你需要自行判斷,其實(shí)也很簡(jiǎn)單,如可在 Contact 類中編寫一個(gè)函數(shù)檢驗(yàn)一下即可。

    ActionForm 創(chuàng)建完畢后,我們需要在 Jsp Form 中引用這些 JavaBean 類型的屬性值,那就很簡(jiǎn)單啦,只需采用“ Form 的屬性名稱”+“ . ”+“ JavaBean 中的屬性名稱”結(jié)構(gòu)構(gòu)成的名稱付給相關(guān)元素即可。如:

    <html:text property="contact.email">

    通過這種方式我們就可以處理好 ActionForm 中的 JavaBean 類型的屬性值了。

    實(shí)際的情況可能更復(fù)雜些,我們有時(shí)可能要提交多行數(shù)據(jù)到后退,而且行內(nèi)的數(shù)據(jù)是相關(guān)的,如我們需要提交多個(gè)用戶的聯(lián)系方式,這些行內(nèi)的數(shù)據(jù),如email ,電話,手機(jī),這些數(shù)據(jù)都是和用戶編碼相關(guān)的,現(xiàn)在我們修改一下 Contact 類,添加一個(gè)用戶編碼 (userId)屬性,這時(shí)我們構(gòu)建的 ActionForm 中可能需要一個(gè)列表數(shù)據(jù)( List )類型來處理這種情況。以下是這個(gè) ActionForm的部分代碼:

    public class ModifyBatchContactForm extends ActionForm

    {

    private List contact =new AutoArrayList (Contact.class);

    …..

    }

    在以上代碼中,我們同樣處理了 List 類型數(shù)據(jù)的初始化。 Struts 在給 List 中的對(duì)象賦值時(shí),當(dāng)然需要先獲取 List數(shù)據(jù),然后在獲取 List 中某一個(gè)對(duì)象(通過 Index),最后給對(duì)象賦值。在這里想我們可以更詳細(xì)點(diǎn)分析瀏覽器端傳過來數(shù)據(jù),字段值形式如下:contact[0].email= linux_china@hotmail.com , Struts 獲取 ActionForm 中的 List數(shù)據(jù)后,通過 Index (此時(shí)為 0 )來獲取 List 中封裝的 JavaBean 對(duì)象,然而此時(shí) List是空的(盡管初始化了,但是沒有數(shù)據(jù)),是無法取得封裝的對(duì)象的,因此我們要在 Struts 獲取 List中封裝的對(duì)象的時(shí)候給它創(chuàng)建一個(gè),這樣就保證對(duì)象的獲取和賦值的成功進(jìn)行,所有我們新建一個(gè) AutoArrayList 類,繼承ArrayList ,只要重寫 get(int index) 方法即可,其實(shí)很簡(jiǎn)單,代碼如下:

    public class AutoArrayList extends ArrayList {

    private Class itemClass;

    public AutoArrayList(Class itemClass) {

    this.itemClass = itemClass;

    }

    public Object get(int index) {

    try {

    while (index &gt;= size()) {

    add( itemClass.newInstance());

    }

    } catch (Exception e) {

    e.printStackTrace();

    }

    return super.get(index);

    }

    }

    這樣我們就完成可以多行數(shù)據(jù)提交的 ActionForm設(shè)計(jì),這里還有點(diǎn)提醒,如果從瀏覽器端傳過來的行索引是跳躍是的,如缺少中間行,而你不想要這些數(shù)據(jù)的話,且首尾行 index相差很大的話,這種方式可能不太適合。這種多行提交形式比較適合對(duì)固定行的數(shù)據(jù)處理。如果行數(shù)不固定的話,你可以參考使用 MapForm 方式實(shí)現(xiàn)。

    下面我們就看看如何在 Jsp 中使用這個(gè) ActionForm ,其實(shí)只需要執(zhí)行一個(gè)循環(huán)即可:

    <logic:iterate id=" contact " name=" FormName " property=" contact " indexid="index">

    <html:text name=" contact " property="userId" indexed="true">

    <html:text name=" contact " property="email" indexed="true">

    </html:text>

    這里我們?cè)僦v解一下,代碼中出現(xiàn)的“ contact ”(紅色)都是 ActionForm 中的 List數(shù)據(jù)類型變量名稱,請(qǐng)確保一致,請(qǐng)不要更改名稱,這也是方便提交到后臺(tái)的數(shù)據(jù)接收?!?FormName ”為在 struts-config中聲明的 ActionForm 名稱。 indexed="true" 可以確保生成的 html 元素的名稱唯一,不要缺少這個(gè)聲明。以上的Jsp 代碼,你也可以使用 JSTL 來完成,就看你習(xí)慣如何了。

    通過以上步驟,我們完成了多行數(shù)據(jù)的提交所有環(huán)節(jié),這樣 Struts 就會(huì)完成其他所有的事情,我們的代碼邏輯和實(shí)現(xiàn)也簡(jiǎn)單多了。

    總結(jié):通過以上兩個(gè)例子,相以信對(duì) ActionForm 中使用 JavaBean 和 List 類型數(shù)據(jù)不會(huì)再陌生,同時(shí)使用 Map類型,這樣可創(chuàng)建更好的 ActionForm 設(shè)計(jì),關(guān)于 MapForm ,請(qǐng)參考http://www.jetmaven.net/documents/j_mapformInStruts.php 。不過引入這種方式后,在Validator 方面你可能要花點(diǎn)腦筋啦(如通過 XDoclet 生成 Validator文件可能功能不全),可能你需要手寫一些代碼來完成相關(guān)工作</html:text></logic:iterate></html:text>
    posted on 2006-12-14 09:28 javaGrowing 閱讀(625) 評(píng)論(0)  編輯  收藏 所屬分類: struts學(xué)習(xí)

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲爆乳少妇无码激情| 97在线视频免费| 亚洲日韩精品无码专区加勒比| 国产亚洲精AA在线观看SEE| 免费观看男人免费桶女人视频| a毛片免费播放全部完整| 亚洲av成本人无码网站| 亚洲邪恶天堂影院在线观看| 亚洲日韩人妻第一页| 青青青国产免费一夜七次郎| 国产91色综合久久免费| 日本视频在线观看永久免费| 国产激情久久久久影院老熟女免费| 亚洲精品av无码喷奶水糖心| 亚洲国产精品久久人人爱| 久久久久久a亚洲欧洲aⅴ| 亚洲伊人成无码综合网| 亚洲av麻豆aⅴ无码电影| 永久免费av无码网站大全| 最近高清国语中文在线观看免费| 91香蕉国产线观看免费全集| 在线观看免费播放av片| 久久一区二区免费播放| 一二三四在线观看免费中文在线观看| 亚洲精品无码国产片| 亚洲中文字幕无码爆乳app| 亚洲日本人成中文字幕| 亚洲一区二区三区播放在线| 亚洲春色另类小说| 亚洲福利秒拍一区二区| 亚洲欧洲国产精品久久| 亚洲午夜电影一区二区三区| 亚洲国产成人资源在线软件 | 高h视频在线免费观看| 亚洲老熟女五十路老熟女bbw| 伊人久久五月丁香综合中文亚洲| 国产 亚洲 中文在线 字幕| 亚洲午夜无码久久| 久久无码av亚洲精品色午夜 | 日本一道本高清免费| 国产免费看插插插视频|