zoukankan      html  css  js  c++  java
  • 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>

  • 相关阅读:
    04 链表(上):如何实现LRU缓存淘汰算法?
    03 数组:为什么很多编程语言中数组都从0开始编号?
    02 复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度
    01 复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?
    Winform PictureBox图片旋转
    我的第一篇博客
    redis分布式锁实现与思考
    java 时间字符串中毫秒值时有时无,怎么解析
    spring 接收处理 json 类型的请求(spring 默认使用jackson 处理接收的数据), json 字段的中的Date 类型会自动 转换为 Long 类型
    java 中的正则使用
  • 原文地址:https://www.cnblogs.com/gaofz/p/6642806.html
Copyright © 2011-2022 走看看