<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麻豆色欲| 亚洲国产精品国自产拍电影| 亚洲精品第一国产综合野| 无码免费又爽又高潮喷水的视频| 99久久99久久免费精品小说| 国产无遮挡吃胸膜奶免费看| 久久久国产精品亚洲一区| 粉色视频免费入口| **aaaaa毛片免费| 亚洲AV无码专区日韩| 亚洲综合激情九月婷婷| 成人免费视频一区二区| 亚洲三级高清免费| 国产国拍亚洲精品mv在线观看| 亚洲经典千人经典日产| 久久综合国产乱子伦精品免费| 国产三级免费电影| 亚洲一区二区三区播放在线| 中文字幕av免费专区| 日美韩电影免费看| 91久久亚洲国产成人精品性色| 高清免费久久午夜精品| 最近的中文字幕大全免费版| 国产成人精品日本亚洲网站| 日韩亚洲人成网站| 欧美在线看片A免费观看| 亚洲av午夜福利精品一区| 黄网站色成年片大免费高清| 免费看韩国黄a片在线观看| 国产AV无码专区亚洲Av| 无套内射无矿码免费看黄| 国色精品卡一卡2卡3卡4卡免费| 亚洲国产精品VA在线看黑人| 老司机午夜精品视频在线观看免费| 99久久精品日本一区二区免费 | 亚洲白色白色在线播放| 中国一级毛片视频免费看| 国产免费一区二区三区VR| 亚洲夂夂婷婷色拍WW47| 亚洲最大免费视频网|