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

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

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

    posts - 73,  comments - 55,  trackbacks - 0
    Struts中ActionForm類型對象的javaBean屬性何時初使化?
    Struts中涉及到多行提交問題時如何處理?
    (此方法可以處理多行相同數據的提交,但表單驗證就需要在formbean中實現,不能用動態form的方法了)


    在Strust 中,我們可能經常要在 ActionForm 中使用其他 JavaBean 作為屬性類型,這里就存在著如何使用好這些屬性與 HTML Form 之間的數據交換。

    如在注冊書籍界面中,我們通常會將書籍的各種信息封裝成一個單獨的新的Class ,如BookBean ,包含以下屬性:書籍編號 (bookId) ,書籍名稱(bookName) ,出版社(company) ,作者(author) ,版本(state) 等等,這樣條理也比較清晰,以下是這個 ActionForm 的部分代碼:
    public class RegisterBookForm extends ActionForm {?
    ??????? private?String currentUsrId;?
    ????????private?Date currentDate;?
    ??????? private?BookBean book = new BookBean();

    ?? ??? ?………..
    ??????? public BookBean getBook() {
    ????????????????? return book;
    ??????? }
    }
    其中BookBean為:
    public class BookBean {
    ??????? private String bookId = null;
    ??????? private String bookName = null;
    ??????? private String company = null;
    ??????? private String author = null;
    ??????? private int state;
    ??????? public String getBookId() {
    ?????????????????........
    ??????? }
    ??????? public void?setBookId(String bookId) {
    ???????????????? .........
    ??????? }
    ??????? 。。。。
    }
    在RegisterBookForm中我們需要將BookBean實例化(在reset 函數中需要重新實例化),這主要因為 Struts 的機制:如我們將 HTML 的 Form 元素(如?bookId )值傳給 ActionForm ,Struts 需要執行的操作是 getBook().setBookId(String bookId) ,如果這時返回的book 對象為空的話,那么賦值如何進行,而且 Struts 也不會知道如何去實例化BookBean 。有時這些 JavaBean 的類型有可能是接口,實例化更是未知,所以關于 JavaBean 類型在 ActionForm 中的實例化,你需要自行完成,而且必須完成。至于在實際操作中判斷 JavaBean 是否被進行過相關操作(不再是初始狀態),你需要自行判斷,其實也很簡單,如可在BooBean 類中編寫一個函數檢驗一下即可。

    ActionForm 創建完畢后,我們需要在 Jsp Form 中引用這些 JavaBean 類型的屬性值,那就很簡單啦,只需采用“ Form 的屬性名稱”+“ . ”+“ JavaBean 中的屬性名稱”結構構成的名稱付給相關元素即可。如:
    <html:text property="book.bookId"/>
    通過這種方式我們就可以處理好 ActionForm 中的 JavaBean 類型的屬性值了。

    實際的情況可能更復雜些,我們有時可能要提交多行數據到后臺,而且行內的數據是相關的,如我們需要執行借書操作,要提交的是多本書的信息,這些行內的數據,如bookId ,bookName,company等都是和bookId相關的。這時我們構建的 ActionForm 中可能需要一個列表數據(ArrayList )類型來處理這種情況。以下是這個 ActionForm 的部分代碼:
    public class BorrowBookForm extends ActionForm {??
    ?????????? private ArrayList?books = new BorrowArrayList ();?
    ?????????? …..
    }

    在以上代碼中,我們同樣處理了ArrayList 類型數據的初始化。Struts 在給ArrayList 中的對象賦值時,當然需要先獲取ArrayList 數據,然后在獲取ArrayList 中某一個對象(通過 Index ),最后給對象賦值。在這里想我們可以更詳細點分析瀏覽器端傳過來數據,字段值形式如下:books[0].bookName= StrutsInAction,Struts 獲取 ActionForm 中的ArrayList 數據后,通過Index(此時為0)來獲取ArrayList 中封裝的 JavaBean 對象,然而此時ArrayList 是空的(盡管初始化了,但是沒有數據),是無法取得封裝的對象的,因此我們要在Struts 獲取 ArrayList 中封裝的對象的時候給它創建一個,這樣就保證對象的獲取和賦值的成功進行,我們新建一個 BorrowArrayList 類,繼承 ArrayList ,只要重寫 get(int index) 方法即可,其實很簡單,代碼如下:
    import java.util.ArrayList;


    /**
    ?* <strong>BorrowArrayList</strong>
    ?* <p>書籍借閱時所有書籍列表</p>
    ?*?
    ?* @author? RenZW
    ?* @version 1.0 2005.09.2
    ?* @since?? 1.0
    ?*/
    public class BorrowArrayList extends ArrayList {
    ??? /*
    ???? * (non-Javadoc)
    ???? *
    ???? * @see java.util.List#get(int)
    ???? */
    ??? public Object get(int index) {
    ??????? while (index >= size()) {
    ??????????? add(new BookBean());
    ??????? }
    ??????? return super.get(index);
    ??? }
    }這樣我們就完成可以多行數據提交的 ActionForm 設計,這里還有點提醒,如果從瀏覽器端傳過來的行索引是跳躍是的,如缺少中間行,且首尾行index 相差很大的話,這種方式可能不太適合。這種多行提交形式比較適合對固定行的數據處理。

    下面我們就看看如何在 Jsp 中使用這個 ActionForm ,其實只需要執行一個循環即可:
    <logic:iterate id="books"? name=" BorrowBookForm" ?property="books " indexId="index">
    ????? <html:text name="books" property="bookId" indexed="true" />
    ????? <html:text name="books" property="bookName" indexed="true"/>
    ????? .........
    </logic:iterate>

    這里我們再分析一下,代碼中出現的“books”都是ActionForm 中的ArrayList 數據類型變量名稱,請確保一致,這也是方便提交到后臺的數據接收。indexed="true" 可以確保生成的 html 元素的名稱唯一,不要缺少這個聲明。

    通過以上步驟,我們完成了多行數據的提交所有環節,這樣 Struts 就會完成其他所有的事情,我們的代碼邏輯和實現也簡單多了。

    posted on 2006-07-11 09:34 保爾任 閱讀(412) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 手机在线看永久av片免费| 亚洲午夜精品久久久久久浪潮| 亚洲一区二区免费视频| 麻豆精品国产免费观看| 中文字幕永久免费视频| 亚洲成a人片在线观看播放| 国产不卡免费视频| 四虎影视在线影院在线观看免费视频| 亚洲人成电影网站色www| 亚洲宅男天堂在线观看无病毒| 成人无码区免费A片视频WWW| 人人鲁免费播放视频人人香蕉| 亚洲色图视频在线观看| 亚洲第一区在线观看| 国产免费丝袜调教视频| 一级毛片视频免费| 日本亚洲免费无线码| 亚洲日韩乱码中文无码蜜桃臀网站 | 国产精品美女免费视频观看| 亚洲精品456在线播放| jjzz亚洲亚洲女人| 国产一卡2卡3卡4卡2021免费观看 国产一卡2卡3卡4卡无卡免费视频 | 亚洲成a人片在线观看中文app | 亚洲天天做日日做天天看| 免费国产精品视频| 中国人xxxxx69免费视频| 99免费在线视频| 免费无码午夜福利片| 99热亚洲色精品国产88| 亚洲人成网站影音先锋播放| 亚洲国产精品成人| 成人免费无毒在线观看网站 | 免费看www视频| 美女裸身网站免费看免费网站 | 亚洲五月午夜免费在线视频 | 亚洲精品**中文毛片| 亚洲va无码专区国产乱码| 亚洲国产精品自在拍在线播放| 成人免费无毒在线观看网站| 免费阿v网站在线观看g| 18禁止看的免费污网站|