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

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

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

    posts - 70,comments - 408,trackbacks - 0

    Struts框架的視圖負責為客戶端提供動態的網頁內容.主要是由JSP網頁構成.還提供了Struts客戶化標簽和ActionForm Bean,這些組件提供對國際化,接收用戶表單輸入的數據,表單驗證和錯誤處理等功能.視圖是模型的外在表現形式,用戶通過視圖來了解模型的狀態,同一個模型可以有多種視圖.框架中視圖由JSP組件構成,除此之外還包括以下組件:

    1)     HTML文檔

    2)     JSP客戶化標簽

    3)     JavaScripet和stylesheet

    4)     多媒體文件

    5)     消息資源(Resource Bundle)

    6)     ActionForm Bean

    ActionForm屬于一種Bean,什么是Bean呢?是可重用的平臺獨立的JAVA組件,JavaBean

    支持屬性,事件,方法和持久化.Struts框架僅僅利用了JavaBean的一小部分特性.Bean和普通的JAVA類很相似,不過它應該遵守以下的規范:

    1)     必須提供不帶參數的構造方法

    2)     Bean的所有屬性提供公共的get/set方法

    3)     對于boolean類型的屬性要提供isXXX()方法,那么該方法返回Boolean類型的屬性

    4)     對于數組類型的屬性,應該提供getXXX(int index)和setXXX(index,value)方法來讀取和設置數組元素.

    Struts利用JavaBean來創建數據傳輸對象,Data Transfer Object簡稱DTO,用于不同的層之間傳遞數據.

    ActionForm是Struts框架提供的DTO,用于在視圖層和控制器之間傳遞HTML表單數據,控制層可以從ActionForm中讀取用于輸入的表單數據,也可以把來自模型的數據保存到ActionForm中,然后返回給視圖.ActionForm具有表單驗證的功能.由于ActionForm類使用了ServletAPI,因此不提倡直接把ActionForm傳遞給模型,而是應該在控制層把它的數據重新組裝到自定義的DTO中,在把它傳遞給模型層.在配置文件中<action>元素的scope屬性設置ActionForm的范圍默認是session.Action的生命周期如下:

    1)     控制器接收到請求

    2)     request或者session范圍內取出ActionForm的實例,沒有就新建一個

    3)     調用Form的reset()方法

    4)     ActionForm實例保存到request或者session范圍中

    5)     把用戶輸入的表單數據裝到ActionForm中

    6)     如果validate屬性是true則調用validate方法

    7)     驗證成功就把ActionForm實例以參數傳遞給Action的execute方法,如果失敗把請求轉發給<action>的input屬性指定的Web組件(大多JSP),ActionForm依然保存在request或者session范圍內.

    Struts框架的ActionForm類是抽象類,必須在應用中創建它的子類,來捕獲具體的HTML表單數據.其中的屬性和表單的屬性一一對應.如果配置文件中<form-bean>元素的name屬性和<action>元素的name屬性匹配,<action>元素中的的validate屬性為true.的時候.validate方法會被調用,基類的返回值是null,如果擴展了ActionForm類,那么應該覆蓋validate方法,這個方法主要負責檢驗格式和語法,而不負責檢查數據是否符合業務邏輯.對于一個請求控制器首先調用的是ActionForm的reset()方法,然后在把用戶輸入的表單數據組裝到ActionFrom中.這個方法負責恢復屬性的默認值,例如把boolean類型的屬性設置成true或者false,把字符串設置為null或者某個初始值.感覺如果ActionForm在request范圍內,那么對于每個新的請求都會創建新的ActionForm實例,當新的實例創建后,它的屬性就是默認值,所以在寫reset()方法就沒什么意義了.如果是在session范圍內,一個實例可以接收多次請求,那么reset()方法就非常有用了!如果是從request或者session范圍中取出Form的值,可以用例如Form f=(Form)session.getAttribute(“Form”)的方法取出.這時Form的名字就是共享對象中的一個key不過如果是在Action的execute()方法中就很簡單了,可以Form f=(Form)Form這樣來獲取一個Form也可以通過其中的具體的get方法來獲取具體的屬性,注意一定要轉換類型.有的時候,由于表單的數量太多,無法在同一個頁面顯示,可以把他們拆分成多個表單,分多個頁面顯示.在這種情況下,即可以為每一個表單創建一個單獨的ActionForm,也可以只創建一個,和多個表單對應.

    下面研討以下如何使用動態的ActionForm,在Struts框架中,ActionForm對象用來包裝HTML表單數據,并能夠動態返回用于顯示給用戶的數據.自己寫的Form必須符合JavaBean的規范,繼承ActionForm同時可以選擇的重寫reset()和validate()方法.雖然ActionForm簡化了Web開發,但是對于大型的項目如果HTML表單改變對應的ActionForm也一定要修改,所以Strust1.1對此做出了修改引入了動態的DynaActionForm類.它支持載配置文件中完成ActionForm的全部配置,沒必要寫額外的程序來創建具體的ActionForm類,配置動態的方法是在配置文件中一個<form-bean>元素.如下:

    <form-beans>

       <form-bean name=”loginForm”

    type=”org.apache.struts.action.DynaActionForm”

    //上面是指定DynaActionForm類,名字是loginForm

    <form-property name=”username” type=”java.lang.String”/>

    <form-property name=”password” type=”java.lang.String”/>

    </form-bean>

    </form-beans>

    <form-bean>元素的子元素<form-property>來設置動態的ActionForm屬性.name指定屬性的名稱,type指定屬性的類型.ActionForm的類型表單的類型.如果要設置JAVA的基本類型,在配置的時候應該用相應的包裝類型來替換,例如int的包裝類型就是Integer.動態的Form類DynaActionForm提供了initialize()方法,它把調但所有的屬性都恢復為默認值.表單屬性默認值由<form-bean>元素的<form-peoprety>子元素的initial屬性來決定.如果沒設置,則表單的默認屬性由其JAVA類型來自動決定.例如對象類型的默認就是null.整型是0.Boolean是false.如果希望Struts每次把表單數據組裝到動態的ActionForm之前,先把所有的屬性恢復為默認值,可以定義一個DynaActionForm的子類,然后覆蓋reset()方法,在其中調用initalize()方法就OK了.

    Action類和JSP都可以訪問動態的ActionForm類,使用方法與標準的Form大致相同.有一點區別就是如果使用標準的Form類,用get和set方法就可以,而DynaActionForm是把所有的屬性保存在一個Map類對象中.訪問的方法如下:

    public Object get(String name)

    public void set(Strig name,Object value)

    DynaActionForm基類的validate()方法沒有提供任何默認的驗證行為,可以定義擴展它的子類,然后覆蓋validate()方法,但是以編程的方法來驗證動態的ActionForm違背了Struts框架提供的機制.幸運的是,可以采用另一種機制.Validator框架來完成驗證,如果想了解Validator驗證框架,不要急繼續關注我的Blog,我還會漫漫道來.

    今天側重研討了構成Struts視圖組件的ActionForm,因為它非常重要,必須徹底的了解它算能真正的學會Struts,它可以存放在session和request范圍內.下面說一些開發技巧希望能對關注我的Blog的朋友們,在如后的開發中有所幫助.

    1)     HTML表單中定義<html;hidden properyt=”page”/>隱藏字段來標示當前頁面

    2)     ActionForm中定義page屬性,它和表單中的隱藏字段page對應

    3)     ActionForm的reset()方法中,只能把當前表單相關的屬性值恢復默認值.

    4)     ActionFomr的validate()方法中,只能對當前表單的相關屬性進行驗證.

    5)     在配置ActionForm和Actin的映射的時候,應該把ActionForm的范圍設為session

    Struts框架還引入了DynaActionForm類,是動態創建ActionForm的類,要注意的如下:

    1)<form>的<form-porperty>子元素是用來配置動態Form的.type屬性指定ActionForm的屬性的類型.如果是JAVA基本類型,則用JAVA包裝類型.

    2)提倡使用Validator框架來驗證動態的ActionForm.這樣可以避免用編程的方法來實現validate()方法.

    3)通常不需要擴展DynaActionForm類,如果需要提供屬性的復位功能,則擴展此類,然后重寫reset方法中去調用initialize()方法進行復位,通常ActionForm在Session范圍內使用此方法.

    4)如果訪問DynaActionForm的屬性,應該調用以下方法:

      public Object(String name)

      public void set(String name,Object value)

      name參數代表屬性的名稱.

    寫的手好累呵呵,希望看過的朋友能給點評價,如果有響應的錯誤請大家多多指教.(網友們的支持,是我繼續寫技術文章的動力!)

    posted on 2005-10-26 13:58 我心依舊 閱讀(3038) 評論(8)  編輯  收藏

    FeedBack:
    # re: Struts視圖組件(原創)
    2005-10-26 16:47 | redvale
    不錯,說的蠻詳細的  回復  更多評論
      
    # re: Struts視圖組件(原創)
    2006-02-22 15:29 | ychyl@yeah.net
    我現在有個問題, 就是ActionForm中只要是int型或者Integer的屬性, 沒有值時總是初始化為0, 我希望沒有值, 則跟對象一樣, 初始化為null, 你知道怎么辦嗎?  回復  更多評論
      
    # re: Struts視圖組件(原創)
    2006-08-09 13:23 | 衙內乖乖
    我是初學者,文章很不錯,收藏啦~~
    希望你再接再厲寫出更好的文章~~  回復  更多評論
      
    # re: Struts視圖組件(原創)
    2006-08-31 09:57 | 周利軍
    public Object get(String name)  回復  更多評論
      
    # re: Struts視圖組件(原創)
    2006-08-31 09:59 | 周利軍
    寫得很好,支持
      回復  更多評論
      
    # re: Struts視圖組件(原創)
    2006-09-20 17:32 | 甜蜜的豆沙包
    請教一下:為什么會有Cannot find bean org.apache.struts.taglib.html.BEAN in any scope異常?
    我的"struts-config.xml"如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

    <struts-config>
    <data-sources />
    <form-beans >
    <form-bean name="setVoteForm" dynamic="true" type="org.apache.struts.action.DynaActionForm" >
    <form-property name="topicName" type="java.lang.String"/>
    <form-property name="itermNumber" type="java.lang.String"/>
    <form-property name="iterContent" type="java.lang.String"/>
    </form-bean>
    </form-beans>

    <global-exceptions />
    <global-forwards />
    <action-mappings >
    <action
    validate="false"
    input="/form/SetVote.jsp"
    name="setVoteForm"
    path="/setVote"
    scope="request"
    type="cn.cbsw.vote.settingvote.controller.SetVoteAction" />
    </action-mappings>

    <message-resources parameter="cn.cbsw.vote.struts.ApplicationResources" />
    </struts-config>


      回復  更多評論
      
    # re: Struts視圖組件(原創)
    2007-09-12 15:55 | Java_oracle
    想識恨晚  回復  更多評論
      
    # re: Struts視圖組件(原創)
    2007-12-16 09:37 | 朱仔
    寫得很好,每天都期待你的新作品。  回復  更多評論
      

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


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 久久久久久毛片免费看| 边摸边吃奶边做爽免费视频网站| 高清永久免费观看| 国产亚洲精久久久久久无码AV| 国产精品亚洲专区无码牛牛| 国产网站免费观看| 美女被艹免费视频| 亚洲?v无码国产在丝袜线观看| 又硬又粗又长又爽免费看 | 亚洲综合精品成人| 在线观看av永久免费| 亚洲中文字幕乱码AV波多JI| 在线中文高清资源免费观看| 香蕉视频亚洲一级| 国产午夜亚洲精品午夜鲁丝片| 两个人www免费高清视频| 久久亚洲成a人片| 国产一卡二卡3卡四卡免费| 亚洲AV无码资源在线观看| 哒哒哒免费视频观看在线www| 国产精品免费大片一区二区| 亚洲卡一卡2卡三卡4卡无卡三| 日本片免费观看一区二区| 亚洲成a∧人片在线观看无码| 亚洲国产精品碰碰| 日本一道本不卡免费 | 免费看美女裸露无档网站| 亚洲成AV人影片在线观看| 亚洲AV网站在线观看| 国产色爽免费无码视频| 亚洲国产日韩女人aaaaaa毛片在线 | 亚洲午夜精品国产电影在线观看| 色妞WWW精品免费视频| 一级中文字幕免费乱码专区| 亚洲AV无码久久寂寞少妇| 啦啦啦中文在线观看电视剧免费版| 成人免费观看男女羞羞视频| 久久久无码精品亚洲日韩按摩| 永久黄网站色视频免费直播 | 2021国产精品成人免费视频| 色偷偷亚洲男人天堂|