获得request对象有三种方式:
方式一:aware接口注入,即实现ServletRequestAware接口(此方式最为麻烦)
public class Demo2ServletAction extends ActionSupport implements ServletRequestAware{
private HttpServletRequest request;
@Override
public String execute() throws Exception {
request.setAttribute("gf", "request_aware");
return SUCCESS;
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
}
方式二:使用ServletActionContext工具类(此方式虽好,但与servlet api耦合)
public class Demo1ServletAction extends ActionSupport{
@Override
public String execute() throws Exception {
ServletActionContext.getRequest().setAttribute("gf", "request");
return SUCCESS;
}
}
方式三:通过ActionContext来获得(此方法与serlvet api解耦,建议使用)
public class Demo3ServletAction extends ActionSupport{
@Override
public String execute() throws Exception {
ActionContext.getContext().put("gf", "request");
return SUCCESS;
}
}
Struts2中Action接收参数的方法主要有以下三种:
1.使用Action的属性接收参数
a.定义:在Action类中定义属性,创建get和set方法;
b.接收:通过属性接收参数,如:userName;
c.发送:使用属性名传递参数,如:user1!add?userName=Magci;
2.使用DomaunModel接收参数:
a.定义:定义Model类,在Action中定义Model类的对象(不需要new),创建该对象的get和set方法;
b.接收:通过对象的属性接收参数,如:user.getUserName();
c.发送:使用对象的属性传递参数,如:user2!add?user.userName=MGC;
3.使用ModelDriven接收参数:
a.定义:Action实现ModelDriven泛型接口,定义Model类的对象(必须new),通过getModel方法返回该对象;
b.接收:通过对象的属性接收参数,如:user.getUserName();
c.发送:直接使用属性名传递参数,如:user2!add?userName=MGC
1、通过属性驱动式
<form action="sys/login.action" method="post">
<input type="text" name="username">
<input type="submit" value="submit">
</form>
--------------------------------------------------------------------------
public class sysAction extends ActionSupport{
private String username;
public String login() throws Exception {
System.out.println(username);
return SUCCESS;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username= username;
}
}
2.模型驱动方式,必须要实现ModelDriven<T>接口。对于要传入多个model第二种方式不方便
form action="sys/login.action" method="post">
<input type="text" name="username">
<input type="submit" value="submit">
</form>
Action:必须实现getModel() 方法
public class sysAction extends ActionSupport implements ModelDriven<User>{
private User user;
public String login() throws Exception {
System.out.println(getModel().getUsername());
return SUCCESS;
}
public User getModel() {
if (null == user) {
return user = new User();
}
return user;
}
}
3.第三种方式可以完全不实现ModelDriven<T>,也可使用多个model对象的属性。
<form action="sys/login.action" method="post">
<input type="text" name="user.username">
<input type="text" name="teacher.level">
<input type="submit" value="submit">
</form>
public class sysAction extends ActionSupport{
private User user;
private Teacher teacher;
public String login() throws Exception {
System.out.println(user.getUsername());
System.out.println(teacher.getLevel());
return SUCCESS;
}
public void setUser(User user) {
this.user = user;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}
}
界面如何提交给struts2的Action的URL链接:
<form action=””></form>
Action实现页面跳转和配置的各项默认值:1、Action设置单个页面跳转:
<action name="example" class="com.struts2.house.rent.action.ExampleAction">
<result >/login.jsp</result>
</action>
2
、
Action
设置多个页面跳转:
<action name="example" class="com.struts2.house.rent.action.ExampleAction">
<result name="error">/error.jsp</result>
<result name="login">/login.jsp</result>
</action>
3
、
Action
设置多个页面跳转和重定向:
<action name="example" class="com.struts2.house.rent.action.ExampleAction">
<result name="success" type="redirect">house!pre_list.action</result>
<result name="login">/login.jsp</result>
</action>
4
、
Action
的默认设置:
如果不为Action设置class,则Action默认是ActionSupport。
如果不为Action设置method属性,默认是执行execute方法。
如果没有设置result的name值,默认为”SUCCESS“