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>
struts2结果处理、获取参数(二)的更多相关文章
- C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取
		
一.前言 当下微信公众号几乎已经是每个公司必备的,但是大部分微信公众账号用户体验都欠佳,特别是涉及到用户绑定等,需要用户进行复杂的操作才可以和网站绑定,或者很多公司直接不绑定,而是每次都让用户填写账号 ...
 - struts2框架学习笔记4:获取参数
		
第一种参数获取方式: 编写一个前端页面,提交表单,做示例: <form action="${pageContext.request.contextPath}/Demo1Action&q ...
 - Servlet Struts2 SpringMVC 获取参数与导出数据 方法比较
		
servlet中通过request.getParameter()从网页获取参数 通过request session servletContext几个域对象的setAttribute(String ,O ...
 - Struts2获取参数的几种方式
		
Struts2由于是一个贴心的框架,所以获取参数这种体力活,就无需再通过原生的request来getParameter了,有如下几种方式进行获取 1.Action中属性驱动,必须提供与form表单na ...
 - 微信小程序通过二维码获取参数运行
		
小程序开发过程中会遇到参数id会通过二维码获取,然后执行接口获取数据,但是难免会遇到带过来的参数出现乱码,这样就需要解码,多个参数时就需要进行处理取我们需要的字段值:小程序开发过程中会遇到参数id会通 ...
 - Struts2的标签库(二)——OGNL表达式
		
Struts2的标签库(二) --OGNL表达式 1.Struts2中的OGNL表达式增加了ValueStack的支持. 注:ValueStack--实际上是一个容器对象,该对象在启动Struts2框 ...
 - Struts2的处理结果(二)——处理结果的类型
		
Struts2的处理结果(二) --处理结果的类型 1.Struts2內建的支持的结果类型: 在<result>元素中的type属性,确定了结果类型. chain:Action链式处理的结 ...
 - Servlet生命周期以及获取参数
		
1. 创建Servlet几种方式 1) 实现Servlet接口 控制Servlet的生命周期 构造器 init() service() des ...
 - Struts2中Action接收参数的方法
		
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt112 Struts2中Action接收参数的方法主要有以下三种: 1.使用A ...
 
随机推荐
- 【VIP视频网站项目】VIP视频网站项目v1.0.3版本发布啦(程序一键安装+电影后台自动抓取+代码结构调整)
			
在线体验地址:http://vip.52tech.tech/ GIthub源码:https://github.com/xiugangzhang/vip.github.io 项目预览 主页面 登录页面 ...
 - $(document).ready(function(){}) 与 window.onload = function(){} 区别
			
$(document).ready(fucntion(){ //在页面dom结构加载完毕后执行代码, }) window.onload = function(){ //页面所有内容加载完毕后,执行代码 ...
 - [pytorch学习]1.pytorch ubuntu安装
			
看完了Deep Learning with Python,尝试了部分Keras的demo代码. 感觉Keras虽然容易上手,能够快速搭建出一个通用的模型,但是缺乏对底层的控制. 同时,在使用了自己编译 ...
 - Charles 下载-破解-安装-配置
			
我当前使用版本为V4.2.7 最新版本下载地址 Charles 在线破解工具 下载完之后,先进行安装,安装完之后,根据破解链接中的步骤来就ok了. 比较费劲配置在下面,不过跟着一步步来就一定能好的 点 ...
 - 【模板】非旋转Treap
			
Treap,也叫做树堆,是指有一个随机附加域满足堆的性质的二叉搜索树. 如果一棵二叉搜索树插入节点的顺序是随机的,那我们得到的二叉搜索树在大多数情况下是平衡的,期望高度是log(n). 但有些情况下我 ...
 - linux系统监控:记录用户操作轨迹,谁动过服务器
			
1.前言 我们在实际工作当中,都碰到过误操作.误删除.误修改过配置文件等等事件.对于没有堡垒机的公司来说,要在linux系统上深究到底谁做过配置文件的修改.做过误删除是很头疼的事情,特别是遇到删库跑路 ...
 - C++ primer chapter 12
			
动态内存:之前的程序使用对象有着严格定义的生存期,会自动销毁.C++支持动态分配对象,动态分配对象的生存期和他们在哪里创建是无关的,只有当显式的被释放,这些对象才会销毁.标准库定义了智能指针对象可以自 ...
 - iOS:解决pod的Insecure world writable dir问题
			
当我们运行pod setup的命令的时候,有时候会碰到这个警告: /Library/Ruby/Gems/2.0.0/gems/cocoapods-0.33.1/lib/cocoapods/execut ...
 - ORACLE11G 将dataguard的rman备份恢复到測试环境的单机oracle中的具体过程
			
. 也就是说此时数据库仅仅能进行不全然恢复了,在打开数据库时得使用resetlogs打开. recover database until scn 11412370952; RMAN> recov ...
 - HDU4882ZCC Loves Codefires(贪心)
			
ZCC Loves Codefires Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...