struts中action與頁面之間的傳值方式


1.默認配置下的excute方法傳值

如何把登陸頁面中的用戶名傳遞到登錄成功的頁面中呢?
有三種方式,

1,使用默認的action的傳遞方式。
2,自定義一個vo,在action中使用這個vo
3,使用ModelDriven的方式。
下面分別敘述。

1,使用默認的action的傳遞方式。
action文件如下:

Java代碼   收藏代碼
  1. package struts2.login;  
  2.    
  3. public class LoginAction {  
  4.      
  5.     private String username;  
  6.     private String password;  
  7.      
  8.     public String getUsername() {  
  9.         return username;  
  10.     }  
  11.     public void setUsername(String username) {  
  12.         this.username = username;  
  13.     }  
  14.     public String getPassword() {  
  15.         return password;  
  16.     }  
  17.     public void setPassword(String password) {  
  18.         this.password = password;  
  19.     }  
  20.      
  21.     public String execute() {  
  22.         System.out.println (LoginAction.class.hashCode());  
  23.         if (username.equalsIgnoreCase("aaa") &&  
  24.                 password.equals("aaaaaa")) {  
  25.             return "loginSuc";  
  26.         }  
  27.         else {  
  28.             return "loginFail";  
  29.         }  
  30.     }  
  31.  }  
  32.    



登陸成功的文件如下:

Java代碼   收藏代碼
  1. <%@ page contentType="text/html; charset=gb2312" %>  
  2. <%@ taglib uri="/struts-tags" prefix="s"%>  
  3. <meta http-equiv="content-type" content="text/html;charset=gb2312">  

 

Java代碼   收藏代碼
  1. 歡迎您,<s:property value="username" /> 登錄成功。  
  2.    


2,自定義一個vo,在action中使用這個vo

自定義vo文件名:LoginVO.java
文件內容:

Java代碼   收藏代碼
  1. package struts2.login;   
  2. public class LoginVO {  
  3.      private String username;  
  4.     private String password;  
  5.      
  6.     public String getUsername() {  
  7.         return username;  
  8.     }  
  9.     public void setUsername(String username) {  
  10.         this.username = username;  
  11.     }  
  12.     public String getPassword() {  
  13.         return password;  
  14.     }  
  15.     public void setPassword(String password) {  
  16.         this.password = password;  
  17.     }  
  18. }  




在Action文件中,要使用這個vo
文件內容:

Java代碼   收藏代碼
  1. package struts2.login;  
  2.  public class LoginAction {  
  3.      private LoginVO user = null;  
  4.    
  5.     public String execute() {  
  6.         System.out.println (LoginAction.class.hashCode());  
  7.         if (user.getUsername().equalsIgnoreCase("aaa") &&  
  8.                 user.getPassword().equals("aaaaaa")) {  
  9.             return "loginSuc";  
  10.         }  
  11.         else {  
  12.             return "loginFail";  
  13.         }  
  14.     }   
  15.      public LoginVO getUser() {  
  16.         return user;  
  17.     }   
  18.     public void setUser(LoginVO user) {  
  19.         this.user = user;  
  20.     }  
  21. }  



登陸成功的文件如下:

Java代碼   收藏代碼
  1. <%@ page contentType="text/html; charset=gb2312" %>  
  2. <%@ taglib uri="/struts-tags" prefix="s"%>  
  3. <meta http-equiv="content-type" content="text/html;charset=gb2312">  

 

Java代碼   收藏代碼
  1. 歡迎您,<s:property name="user.username"> 登錄成功。  
  2.    


注意login文件的部分也要進行修改
文件內容如下:

Java代碼   收藏代碼
  1. <meta http-equiv="content-type" content="text/html;charset=gb2312">  
  2. <title>login2</title>  
  3.    
  4. <form action="login.action" method="post">  
  5.   username:<input type="input"  name="user.username" ><br>  
  6.   password:<input type="input"  name="user.password" ><br>  
  7.   <input type="submit" value="登錄">  
  8. </form>  


3,使用ModelDriven的方式。
同樣也需要一個vo,這個vo和方法2中的一致,但是action中的寫法就不一樣了。
action文件內容如下:

Java代碼   收藏代碼
  1. package struts2.login;   
  2. import com.opensymphony.xwork2.ModelDriven;  
  3.    
  4. public class LoginAction  implements ModelDriven<LoginVO> {  
  5.      @Override  
  6.     public LoginVO getModel() {  
  7.         // TODO Auto-generated method stub  
  8.         return user;  
  9.     }  
  10.    
  11.     private LoginVO user = new LoginVO();  
  12.     public String execute() {  
  13.         System.out.println (LoginAction.class.hashCode());  
  14.         if (user.getUsername().equalsIgnoreCase("aaa") &&  
  15.                 user.getPassword().equals("aaaaaa")) {  
  16.             return "loginSuc";  
  17.         }  
  18.         else {  
  19.             return "loginFail";  
  20.         }  
  21.     }  
  22. }  


而登陸成功的頁面和login的文件則不需要追加user的前綴,即和方法1的文件內容一樣。

Java代碼   收藏代碼
  1. 歡迎您,<s:property value="username" /> 登錄成功。  
  2.    


三種方法的總結:
第一種方法把form的值都放在action文件中,當form提交的項目很多的時候,action的內容將變得很多,很臃腫。項目少的時候可用。

第二種方法將form的值單獨放在vo中,解決了action文件臃腫的問題,同時使form和action分開,較好。但是需要在設置和獲取的jsp頁面上進行標識。

第三種方法在第二種方法的基礎上,通過實現特定的接口,去掉了action中的set和get方法,同時去掉了jsp頁面上的標識。使后台程序的logic更加清晰

 

在Action中getter和setter方法的變量:是對象的話(如 user),JSP頁面用:  

User  user = (User)request.getAttribute("user");  

然后再用<%=user.getUserName()%>等等方法來獲取其值。  

如果是屬性值得話(如username),JSP頁面用  

<%=request.getParameter("username")%>  

還可以用如下的方法:  

ServletActionContext.getRequest().getSession().setAttribute("SessionKey", "SessionValue");  

在jsp中可以用如下方法獲得:session.getAttribute("user");//這樣的賦值方法可以使得user在所有的JSP頁面都能獲取到,而不僅僅是在跳轉到得JSP頁面中能夠獲得。  

還有一種獲取方式:JSP中的  

${user.username}獲取  

還用一種:struts標簽的方式,好像和上面的方法差不多。  

        <s:textfield name="user.username" label="用名"></s:textfield>      

        <s:textfield name="user.password" label="密碼"></s:textfield>   

        <s:hidden name="user.id"></s:hidden>     

如果是List的對象的話,除了session和request.getAttribute("userList")的方式外,struts標簽還可以這么用:  

<s:iterator value="userList">  

        <tr >  

            <td>  

            <a href='<s:url action="getUser" ><s:param name="id" value="id" /></s:url>'>  

            修改  

            </a>  

            </td>  

            <td><s:property value="id"/></td>  

            <td><s:property value="name"/></td>  

            <td><s:property value="password"/></td>  

            <td><s:property value="address"/></td>  

            <td><a href='<s:url action="deleteUser"><s:param name="id" value="id" /></s:url>'>刪除</a></td>  

        </tr>  

    </s:iterator>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM