struts2从form取值的三种方式

在Eclipse中建立第一个Struts2程序中我们建立了第一个struts程序,那么如何把登陆页面中的用户名传递到登录成功的页面中呢? 
有三种方式, 

1,使用默认的action的传递方式。 
2,自定义一个vo,在action中使用这个vo 
3,使用ModelDriven的方式。 
下面分别叙述。 

1,使用默认的action的传递方式。 
action文件如下: 
package struts2.login; 

public class LoginAction { 

    private String username; 
    private String password; 

    public String getUsername() { 
        return username; 
    } 
    public void setUsername(String username) { 
        this.username = username; 
    } 
    public String getPassword() { 
        return password; 
    } 
    public void setPassword(String password) { 
        this.password = password; 
    } 

    public String execute() { 
        System.out.println (LoginAction.class.hashCode()); 
        if (username.equalsIgnoreCase("aaa") && 
                password.equals("aaaaaa")) { 
            return "loginSuc"; 
        } 
        else { 
            return "loginFail"; 
        } 
    } 




登陆成功的文件如下: 
<%@ page contentType="text/html; charset=gb2312" %> 
<%@ taglib uri="/struts-tags" prefix="s"%> 
 


欢迎您,登录成功。 

2,自定义一个vo,在action中使用这个vo 
自定义vo文件名:LoginVO.java 
文件内容: 
package struts2.login; 

public class LoginVO { 
    private String username; 
    private String password; 

    public String getUsername() { 
        return username; 
    } 
    public void setUsername(String username) { 
        this.username = username; 
    } 
    public String getPassword() { 
        return password; 
    } 
    public void setPassword(String password) { 
        this.password = password; 
    } 




在 Action文件中,要使用这个vo 
文件内容: 
package struts2.login; 

public class LoginAction { 
    private LoginVO user = null; 

    public String execute() { 
        System.out.println (LoginAction.class.hashCode()); 
        if (user.getUsername().equalsIgnoreCase("aaa") && 
                user.getPassword().equals("aaaaaa")) { 
            return "loginSuc"; 
        } 
        else { 
            return "loginFail"; 
        } 
    } 

    public LoginVO getUser() { 
        return user; 
    } 

    public void setUser(LoginVO user) { 
        this.user = user; 
    } 



登陆成功的文件如下: 
<%@ page contentType="text/html; charset=gb2312" %> 
<%@ taglib uri="/struts-tags" prefix="s"%> 
 


欢迎您,登录成功。 

注意login文件的部分也要进行修改 
文件内容如下: 
 
login2 

 
username:
 

password:
 

 
 


3,使用 ModelDriven的方式。 
同样也需要一个vo,这个vo和方法2中的一致,但是action中的写法就不一样了。 
action文件内容如下: 
package struts2.login; 

import com.opensymphony.xwork2.ModelDriven; 

public class LoginAction implements ModelDriven
    @Override 
    public LoginVO getModel() { 
        // TODO Auto-generated method stub 
        return user; 
    } 

    private LoginVO user = new LoginVO(); 
    public String execute() { 
        System.out.println (LoginAction.class.hashCode()); 
        if (user.getUsername().equalsIgnoreCase("aaa") && 
                user.getPassword().equals("aaaaaa")) { 
            return "loginSuc"; 
        } 
        else { 
            return "loginFail"; 
        } 
    } 


而登陆成功的页面和login的文件则不需要追加 user的前缀,即和方法1的文件内容一样。 

三种方法的总结: 
第一种方法把form的值都放在action文件中,当form提交的项目很多的时候,action的内容将变得很多,很臃肿。项目少的时候可用。 

第二种方法将form的值单独放在vo中,解决了 action文件臃肿的问题,同时使form和action分开,较好。但是需要在设置和获取的jsp页面上进行标识。 

第三种方法在第二种方法的基础上,通过实现特定的接口,去掉了action中的set和get方法,同时去掉了jsp页面上的标识。使后台程序的logic更加清晰。 







当我们进行一个应用的时候,根据从页面提交过来的应用的类型不同的时候,需要进行不同的action转发处理的时候,如何做呢,可以在struts中通过 result标签的设置来进行。 

举例如:是管理者的用户登录的时候,执行完了认证需要的loginaction后,想进行admin权限 action的处理,并跳转到管理者的首页面。 

而如果是普通用户登录后,执行完了认证需要的loginaction后,想进行普通用户的权限action的处理,并跳转到普通用户的首页面。 

以下是一个实现示例: 

首先是一个login.jsp文件, 
在这个jsp文件中,我们提交admin或者user来设定权限。 
文件内容: 
<%@ page contentType="text/html; charset=gb2312" %> 
<%@ taglib uri="/struts-tags" prefix="s"%> 
 
 
输入 admin,或者user
 

role:
 

 
 

 

然后是LoginAction.java文件 
在这个文件中取得页面传过来的权限(role) 
文件内容; 
package struts2.login; 

import com.opensymphony.xwork2.ActionSupport; 

public class LoginAction extends ActionSupport{ 
    private String role = ""; 
    public String getRole() { 
        return role; 
    } 
    public void setRole(String role) { 
        this.role = role; 
    } 
   
    @Override 
    public String execute() throws Exception { 
        // TODO Auto-generated method stub 
        return SUCCESS; 
    } 


然后是struts.xml文件 
 

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
    "http://struts.apache.org/dtds/struts-2.0.dtd"> 

 

     
         
            ${role} 
         
       
         
            admin.jsp 
         
       
         
            user.jsp 
         
     
   
 

在这个文件中,在login的action配置的地方,result的设定使用了 type="chain"的设定方式,将结果进行其它action的转发,而转发的action名字则为action中的变量值role。 

然后在下面配置了两个forward的action,根据role分别转到不同的页面。 
这里没有指定action的class,可以根据实际的应用进行添加。 

结果页面; 
文件名:admin.jsp 
文件内容: 
<%@ page contentType="text/html; charset=gb2312" %> 
<%@ taglib uri="/struts-tags" prefix="s"%> 

 
admin管理action成功。 
 


文件名:user.jsp 
文件内容: 
<%@ page contentType="text/html; charset=gb2312" %> 
<%@ taglib uri="/struts-tags" prefix="s"%> 

 
user的action成功。 

-------------------------------------------------------------------->>
转载于:http://blog.csdn.net/tianlincao/article/details/6098371
请使用浏览器的分享功能分享到微信等