struts2结果处理、获取参数(二)
结果处理
1.转发
type可以不写,默认就是转发
<package name="hello" namespace="/hello" extends="struts-default">
<action name="HelloAction" class="com.struts2.web.HelloAction" method="hello">
<result name="success" type="dispatcher">/index.jsp</result>
</action>
</package>
运行后浏览器地址不变
2.重定向
type="redirect" 就是重定向
<package name="hello" namespace="/hello" extends="struts-default">
<action name="HelloAction" class="com.struts2.web.HelloAction" method="hello">
<result name="success" type="redirect">/index.jsp</result>
</action>
</package>
运行后浏览器地址变为index.jsp了
3.转发到Action(不常用)
运行后地址不变
<package name="hello" namespace="/hello" extends="struts-default">
<action name="HelloAction" class="com.struts2.web.HelloAction" method="hello">
<result name="success" type="chain">
<param name="actionName">HaHaAction</param>
<!--要转发的命名空间 -->
<param name="namespace">/hello</param>
</result>
</action>
<action name="HaHaAction" class="com.struts2.web.UserAction" method="Add">
<result name="success">/chain.jsp</result>
</action>
</package>
先执行hello 执行完毕后 再执行Add
4.重定向到Action
运行后地址变为/hello/HaHaAction.action (默认.action 或不写)
<package name="hello" namespace="/hello" extends="struts-default">
<action name="HelloAction" class="com.struts2.web.HelloAction" method="hello">
<result name="success" type="redirectAction">
<param name="actionName">HaHaAction</param>
<!--要转发的命名空间 -->
<param name="namespace">/hello</param>
</result>
</action>
<action name="HaHaAction" class="com.struts2.web.UserAction" method="Add">
<result name="success">/chain.jsp</result>
</action>
</package>
获得原生ServletAPI
struts2 中 有一个ActionContext 数据中心对象 通过他可以获得
原生request、原生response、原生ServletContext、request域、session域、application域、param参数、attr域 分别对应
HttpServletRequest、HttpServletResponse、ServletContext、 四大域和param参数都是Map 通过setAttribute 和getAttribute 分别设置和获取他们的Map键值对 attr域是(request域、session域、application域 三合一)
ActionContext 数据中心 也是一个Map
ActionContext生命周期:每次请求时都会创建一个与请求对应的ActionContext对象,请求处理完ActionContext销毁。
获得ActionContext对象,struts2设计的是,将ActionContext对象创建好之后,将ActionContext与当前线程绑定。我们要获得ActionContext,只需要从ThreadLocal中获得即可。
方式1.通过ActionContext
public class HelloAction extends ActionSupport{
public String hello(){
//request域(struts2并不推荐获取原生request域)
Map<String, Object> requestScope = (Map<String, Object>) ActionContext.getContext().get("request");
//推荐设置request域方式
ActionContext.getContext().put("requestKey","requestValue"); //session域
Map<String, Object> sessionScope = ActionContext.getContext().getSession();
sessionScope.put("name","zhagnsan");
//application域
Map<String, Object> applicationScope = ActionContext.getContext().getApplication();
applicationScope.put("username","zhangsan"); return "success";
}
}
<body>
${request.requestKey}
${session.name}
${application.username}
</body>
方式2.通过ServletActionContext(代码中其实也是从ActionContext中获得的) struts不推荐原生的
public class HelloAction extends ActionSupport{
public String hello(){
//原生request
HttpServletRequest request = ServletActionContext.getRequest();
//原生resposne
HttpServletResponse response = ServletActionContext.getResponse();
//原生session
HttpSession session = request.getSession();
//原生ServletContext
ServletContext servletContext = ServletActionContext.getServletContext(); return "success";
}
}
方式3.实现接口的方式(实现各自对应的接口)(通过拦截器完成的)
public class HelloAction extends ActionSupport implements ServletRequestAware{
private HttpServletRequest request;
public String hello(){
request.setAttribute("adsf","sdf"); return "success";
} @Override
public void setServletRequest(HttpServletRequest httpServletRequest) {
this.request = request;
}
}
获取参数
方式1.属性驱动获得参数(只能转换8大基本数据类型及对应包装类和Date日期类)
设置带get set方法的属性 参数名要与属性名一致 (每次请求Action时都会创建新的Action实例对象,struts是线程安全的,可以使用成员变量接收参数。servlet不行)
<form action="${pageContext.request.contextPath}/User/User_Add">
<input name="name">
<button type="submit">提交</button>
</form>
import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport {
private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
public String Add(){ System.out.println(name); return "success";
}
}
方式2.对象驱动 新建一个user类
package com.struts2.domain; public class User {
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} private String name; }
提交表单时,名字设置为user.name
<form action="${pageContext.request.contextPath}/User/User_Add">
<input name="user.name">
<button type="submit">提交</button>
</form>
action中
package com.struts2.web; import com.opensymphony.xwork2.ActionSupport;
import com.struts2.domain.User; public class UserAction extends ActionSupport {
private User user = new User();
public String Add(){
System.out.println(user);
return "success";
}
}
方式3.模型驱动(缺点只能返回一个对象)
User类不变,前台不需要user.name了
<form action="${pageContext.request.contextPath}/User/User_Add">
<input name="name">
<button type="submit">提交</button>
</form>
Action实现ModelDriven<T>接口
package com.struts2.web; import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.struts2.domain.User; public class UserAction extends ActionSupport implements ModelDriven<User>{
private User user = new User();
public String Add(){
user = getModel();
System.out.println(user);
return "success";
} @Override
public User getModel() {
return user;
}
}
集合类型参数
public class UserAction extends ActionSupport{
public List<String> getList() {
return list;
} public void setList(List<String> list) {
this.list = list;
} private List<String> list;
public String Add(){
System.out.println(list.size());
return "success";
}
}
<form action="${pageContext.request.contextPath}/User/User_Add" method="post">
<input name="list[0]">
<input name="list[1]">
<button type="submit">提交</button>
</form>
最新文章
- MySQL 拷贝数据库表方式备份,还原后提示 table xxx &#39;&#39; doesn`t exist
- [SGU495] Kids and Prizes (概率dp)
- CPU阿甘:函数调用的秘密
- 集成学习原理:Adaboost
- sql语句语法大全
- 转载: C++ 转换构造函数 和 类型转换函数
- Questions?
- hdu 3123 GCC
- 使用Java编写并运行Spark应用程序
- Eclipse+Axis使用WSDL文件生成Web Service服务端/客户端
- jq实现鼠标经过图片翻滚效果
- Android中AsyncTask的简单用法 .
- 幂次法则power law
- nginx配置https双向验证(ca机构证书+自签证书)
- 第二次Srum冲刺
- 消除 ASP.NET Core 告警 ";No XML encryptor configured. Key may be persisted to storage in unencrypted form";
- ereg
- 递归加载Treeview
- webpack项目轻松混用css module
- 001.Linux开机启动过程