隨筆 - 37  文章 - 14  trackbacks - 0
          <2008年2月>
          272829303112
          3456789
          10111213141516
          17181920212223
          2425262728291
          2345678

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          相關(guān)鏈接

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          書名:<< Struts2 權(quán)威指南--基于WebWork核心的MVC開發(fā) >>

          一、對Struts2的認識:
          1、Action類可以是一個包含execute方法的POJO類,struts框架提供了一個Action接口及一個ActionSupport工具類,用戶可以根據(jù)自己的需求實現(xiàn)或者繼承來實現(xiàn)自己的Action類。進而實現(xiàn)用戶Action類與HttpServlet API的脫離,有利于測試。
          2、線程安全:Struts2 Action對象為每個請求產(chǎn)生一個實例
          3、丟棄Struts1存在的ActionForm,Struts2直接使用Action屬性來封裝用戶請求屬性,也可以封裝響應(yīng)值。Action所有的屬性都是被封裝到ValueStack對象中,Action屬性名可以理解為ValueStack中的value的名字。在輸出端可以通過ValueStack的findValue()方法查看某個表達式的值
          4、OGNL
          5、數(shù)據(jù)驗證:Action類繼承ActionSupport,并重寫validate()方法;或者通過只繼承ActionSupport,但使用XWork校驗框架進行校驗
          6、配置文件struts.xml 、struts.properties

          二、實例
          1、在web.xml配置struts2 的核心Filter配置
              <filter>
                  
          <filter-name>struts2</filter-name>
                  
          <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
              
          </filter>

              
          <filter-mapping>
                  
          <filter-name>struts2</filter-name>
                  
          <url-pattern>/*</url-pattern>
              
          </filter-mapping>
          2、實現(xiàn)用戶Action并繼承ActionSupport
          public class LoginAction extends ActionSupport {
              
              
          private String username;
              
          private String password;
              
          private String[] books;
              
          public String getPassword() {
                  
          return password;
              }
              
          public void setPassword(String password) {
                  
          this.password = password;
              }
              
          public String getUsername() {
                  
          return username;
              }
              
          public void setUsername(String username) {
                  
          this.username = username;
              }
              
              
              
              
              
          public String[] getBooks() {
                  
          return books;
              }
              
          public void setBooks(String[] books) {
                  
          this.books = books;
              }
              
          public String execute() throws Exception{
                  
          if(getUsername().equals("2b")){
                      ActionContext.getContext().getSession().put(
          "user",getUsername());
                      BookService bs 
          = new BookService();
                      setBooks(bs.getBooks());
                      
          return "success";
                  }
          else{
                      
          return "error";
                  }
              }
              
              
          public void validate(){
                  
          /*        if(getUsername() == null || getUsername().trim().equals("")){
                      addFieldError("username",getText("user.required"));
                  }
          */
              }
              
          }
          2.1、跟蹤用戶狀態(tài):struts2提供了一個ActionContext類,該類提供了一個getSession的方法,但該方法的返回值類型并不是HttpSession,而是Map ;Struts2的攔截器會負責該Session與HttpSession之間的轉(zhuǎn)換。把用戶名存儲在map中,在輸出頁面通過HttpSession的取得user的值
          ActionContext.getContext().getSession().put("user",getUsername());

          2.2、Action屬性都被封裝到ValueStack對象中,頁面輸出信息
                  welcome ${sessionScope.user}
                  
                  
                  
          <table border="1">
                      
          <tr><td>JSP標簽顯示</td></tr>
                      
          <%
                          ValueStack vs 
          = (ValueStack)request.getAttribute("struts.valueStack");
                          
          String[] books = (String[])vs.findValue("books");
                          
          for(String book : books){
                       
          %>
                      
          <tr><td><%=book %></td></tr>
                      
          <%
                          }
                       
          %>
                       
                  
          </table>        
                  
                  
                  
          <table border="1">
                  
          <tr><td colspan="2">struts 標簽顯示</td></tr>
                  
          <s:iterator value="books" status="index">
                      
          <s:if test="#index.odd==true">
                          
          <tr style="background-color:#ccc">
                      
          </s:if>
                      
          <s:else>
                          
          <tr>
                      
          </s:else>
                          
          <td>書名:</td>
                          
          <td><s:property/></td>
                  
          </s:iterator>        
                  
          </table>
          2.3、數(shù)據(jù)校驗:
          A:重寫validate方法,并把提示信息通過addFieldError("username",getText("user.required")添加到ActionSupport的fieldErrors域中,然后通過OGNL表達式輸出。(注:<s:form>具備輸出校驗錯誤的能力)
          B:XWork框架校驗,Action類繼承ActionSupport類,但不需要重寫validate方法。在Action類同一路徑下,增加校驗規(guī)則文件,文件的命名格式為"ActionName-validation.xml",填寫具體驗證規(guī)則


          posted on 2008-02-22 14:08 扭曲的鉛筆 閱讀(610) 評論(1)  編輯  收藏 所屬分類: J2EE

          FeedBack:
          # re: Struts2學(xué)習一 2008-10-24 22:45 路過
          能不能給個做過的例子或小項目學(xué)習下
          謝謝
          郵箱 renjin_job@sina.com  回復(fù)  更多評論
            
          主站蜘蛛池模板: 罗甸县| 深圳市| 简阳市| 婺源县| 浙江省| 东海县| 深圳市| 丽江市| 南木林县| 崇文区| 天水市| 黄浦区| 霞浦县| 许昌市| 松溪县| 汉川市| 枞阳县| 东港市| 华蓥市| 乐陵市| 綦江县| 左云县| 苍山县| 梁河县| 桦甸市| 东方市| 庆城县| 通辽市| 诸城市| 宁南县| 体育| 吕梁市| 义马市| 上栗县| 项城市| 东阳市| 宝山区| 门头沟区| 静宁县| 平舆县| 慈溪市|