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>

原文地址:https://www.cnblogs.com/gaofz/p/6642806.html