通过action的属性接收参数
struts2.xml
<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.configuration.xml.reload" value="true"/>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<package name="user" extends="struts-default" namespace="/user">
<action name="user" class="xidianlili.struts2.user.action.UserAction">
<result>/Useradd_success.jsp</result>
</action>
</package>
</struts>
自定义的action类UserAction类如下:
package xidianlili.struts2.user.action;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String add() {
System.out.println("name:"+name);
System.out.println("age:"+age);
return SUCCESS;
}
}
在这个action类中有两个属性,可以用来接收参数值,struts2自动调用set get方法
在inedx.jsp可以直接传递参数 user!add动态调用方法?后面跟参数
<html>
<head>
<base href="<%=basePath%>"/>
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
</head>
<body>
使用action参数自动调用setget方法属性接受参数<a href="user/user!add?name=lili&age=18">添加用户</a>
</body>
</html>
使用域模型接收参数
这样不用把参数都放在action类中,定义一个model包,创建model类User,把属性和get,set方法加入
package xidianlili.struts2.user.model;
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
此时,action类可以修改为下图所示,加入一个model类,加入setget model类的方法
package xidianlili.struts2.user.action;
import com.opensymphony.xwork2.ActionSupport;
import xidianlili.struts2.user.model.User;
public class UserAction extends ActionSupport {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String add() {
System.out.println("name:"+user.getName());
System.out.println("age:"+user.getAge());
return SUCCESS;
}
}
对应修改index.jsp如下:可以直接用model类.属性进行值接收,struts2自己给我们创建User对象
<body>
使用action参数自动调用setget方法属性接受参数
<a href="user/user!add?user.name=lili&user.age=18">添加用户</a>
</body>
直接输入参数可能和域模型中定义的参数不能一一匹配,所以可以通过中间传递类,一般叫做VO,DO,DTO类
使用ModelDriven接收参数
url传递参数是直接用参数名字:http://localhost:8088/Struts2_0900_ModelDrivenParamInput/user/user!add?name=a&age=8
action类如下:
package com.bjsxt.struts2.user.action;
import com.bjsxt.struts2.user.model.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class UserAction extends ActionSupport implements ModelDriven<User>{
private User user = new User();
public String add() {
System.out.println("name=" + user.getName());
System.out.println("age=" + user.getAge());
return SUCCESS;
}
@Override
public User getModel() {
return user;
}
}
这个时候action类实现了ModelDriven接口,这个接口叫模型驱动接口,重写其中的getModel()方法,这个时候uesr对象必须自己构建,使用这个接口驱动的体现了MVC思想,V就是view,视图,M就是model,接受到请求参数以后都是交给model来处理,C是控制,这里struts2的action就是控制器的作用,控制接受参数用哪个model处理,以及处理结果加入到哪个model
最常用的就是第二种