Struts2 接收参数的三种方式

来源:互联网 发布:高速摄像机知乎 编辑:程序博客网 时间:2024/06/04 19:46

Action接收参数的三种方式:

1:使用action的属性接收参数
2:使用DomainModel接收参数
3:使用ModelDriven接收参数

第一种方式接收参数:

第一种方式:
把表单的数据提交到LoginAction.action
struts.xml文件配置:

 <action name="LoginAction" method="login" class="com.action.LoginAction">     <result>/LoginSuccess.jsp</result>     </action>

action name一定是表单的提交action 调用该action的login方法

public class LoginAction extends ActionSupport {    private String username;    private String password;    public String login(){        System.out.println(username);        return SUCCESS;    }    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;    }}

Login.jsp页面form表单 只有用户和密码 form的action=”LoginAction.action”
在控制台输出username值
但是该方法缺点: 如果一个页面有很多个参数就会创建很多个变量 显得很麻烦

第二种方式接收参数:

第二种方式就是使用面向对象的思想 把属性封装在User中 只是在action中调用User对象就好了
但是如果有两个User对象就需要知道表单的值到底是传给那个User对象的 所以需要在表单的name中添加User对象名.就好了

import com.opensymphony.xwork2.ActionSupport;import com.po.User;public class LoginAction extends ActionSupport {    private User user;    public String login(){        System.out.println(user.getUsername());        return SUCCESS;    }    public User getUser() {        return user;    }    public void setUser(User user) {        this.user = user;    }}

public class User {    private String username;    private String password;    //get和set方法

<form action="LoginAction.action" method="post" name="LoginForm">       用户:<input type="text" name="user.username" value=""/>      密码:<input type="password" name="user.password"  value=""/><br>      <input type="submit" value="提交"/><br>   </form>

======值得注意的是:

我之前使用的是get方式提交表单
在 System.out.println(user.getUsername());报空指针异常
但是使用post提交的时候就可以正常运行 暂时还不知道原因

使用第三种方式接收参数:

1:必须要实现接口:modelDriven
2:对象必须要实例化 不需要get和set方法
3:重写@Override
public User getModel() {

    return user;}

其中T 为实例化的对象的引用
这样的好处是不需要在表单中声明是哪个对象实例获得的参数


public class LoginAction extends ActionSupport implements ModelDriven<User> {    private User user =new User();    public String login(){        System.out.println(user.getUsername());        return SUCCESS;    }    @Override    public User getModel() {        return user;    }}

<form action="LoginAction.action" method="post" name="LoginForm">       用户:<input type="text" name="username" value=""/>      密码:<input type="password" name="password"  value=""/><br>      <input type="submit" value="提交"/><br>   </form>

以上这些都是传的单个值 下面的传的两个集合 :String , User对象集合

但是数组不能传

public class LoginAction extends ActionSupport implements ModelDriven<User> {    private User user =new User();    public String login(){        System.out.println(user.getBookList().get(0));        System.out.println(user.getBookList().get(1));        System.out.println(user.getUserlist().get(0).getUsername());        System.out.println(user.getUserlist().get(1).getUsername());        return SUCCESS;    }

private String username;    private String password;    private List<String> bookList;    private List<User>  userlist;//get和set方法

<form action="LoginAction.action" method="post" name="LoginForm">        用户:<input type="text" name="username" value="" />        密码:<input type="password" name="password" value="" /><br>                 书籍1:<input type="text" name="bookList[0]" value="" /><br>          书籍2:<input type="text" name="bookList[1]" value="" /><br>         人1:<input type="text" name="userlist[0].username" /><br>         人2:<input type="text" name="userlist[1].username" /><br>            年龄:<input type="text" name="age" value=""/>         <input type="submit" value="提交" /><br>    </form>
0 0