欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Struts2 接收参数的三种方式

程序员文章站 2022-05-08 16:10:08
...

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>