<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)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲性线免费观看视频成熟| 高清永久免费观看| 国产日本一线在线观看免费| 成人性生活免费视频| 亚洲白色白色永久观看| 91人人区免费区人人| 亚洲国产高清精品线久久| 亚洲人成影院在线| 午夜影院免费观看| 亚洲第一网站免费视频| 国产成人yy免费视频| 亚洲熟妇无码av另类vr影视| 拍拍拍无挡免费视频网站| 日本免费无遮挡吸乳视频电影| 久久亚洲精品国产精品婷婷| 免费国产黄网站在线观看 | 亚洲av鲁丝一区二区三区| 国产午夜无码片免费| 久久精品国产亚洲AV麻豆不卡| 久久国产乱子伦免费精品| 亚洲国产一区在线观看| 最新69国产成人精品免费视频动漫 | 波多野结衣在线免费观看| 亚洲av产在线精品亚洲第一站| 一二三四在线播放免费观看中文版视频 | 波多野结衣免费视频观看| 亚洲AV一二三区成人影片| 最近最新的免费中文字幕| 美女免费精品高清毛片在线视| 久久精品国产亚洲5555| 在线精品一卡乱码免费| 真正全免费视频a毛片| 亚洲Av综合色区无码专区桃色| 1000部国产成人免费视频| 香蕉视频亚洲一级| 国产精品视_精品国产免费| 亚洲五月午夜免费在线视频| 久久久久久亚洲精品不卡| 91精品全国免费观看含羞草| 亚洲av日韩av永久无码电影| 亚洲中文字幕在线第六区|