JavaEE----Action接受请求参数

一、 Action中如何接受请求参数 parameter

* 实际开发中 不推荐在Action中 去使用Servlet API

1、三种方式:

1) 通过Action 成员变量, 自动接收请求参数

在Action中定义成员变量,变量名称和form元素 name属性一致,并为成员变量 提供setter

<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/> 完成参数封装

2)使用单独Model 对象,基于客户端 OGNL 参数名写法 完成封装

在Action 中创建 model成员变量

页面 用户名 <input type="text" name="user.username" /> <br/>

注意点:Action中 为model对象 提供 get和set方法

3)实现ModelDriven 接口 完成参数封装

Struts2 提供ModelDriven接口 ,通过该接口方法指定 Action 哪个成员是model

public class LoginAction4 extends ActionSupport implements ModelDriven<User>

public User getModel() {

return user;

}

注意点:Model对象必须手动实例化

方式二和方式三 在使用上本质区别 :方式二可以定义多个model 、方式三 只能在一个Action中定义一个Model对象

<interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/> 提供单独拦截器 调用ModelDriven 实现

2、集合对象类型 数据封装  List 、Map

1) List封装

Action private List<User> users;

JSP  <input type="text" name="users[0].username" />

2) Map封装

Action private Map<String, User> usermap;

JSP  <input type="text" name="usermap[‘one‘].username" />

3、自定义类型转换器

struts2 内部提供很多类型转换器,但是当用户提交数据类型格式,是struts2 内部没有提供的 ------------- 需要自定义类型转换器

TypeConverter 定义 public Object convertValue(Map context, Object target, Member member, String propertyName, Object value, Class toType);

子类 DefaultTypeConverter 定义   public Object convertValue(Map context, Object value, Class toType)

* context ognl上下文对象、value要转换值 、toType 转换目标类型

子类 StrutsTypeConverter 将  convertValue(Map context, Object value, Class toType) 拆分为两个方法

* convertFromString(Map context, String[] values, Class toClass)  将String 转换Action中复杂对象类型

* convertToString(Map context, Object o) 将Action中复制对象类型 转换 String 类型

自定义转换器 通常继承 DefaultTypeConverter  或者 StrutsTypeConverter

写转换器

public Object convertValue(Map context, Object value, Class toType) {

// 该方法 有两层含义

// 第一层,支持String 转换 复杂类型

// 第二层,支持复杂类型 转换String

DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");

if (toType == String.class) {

// 将复杂对象 转换 String 类型

Date date = (Date) value;

return dateFormat.format(date);

} else if (toType == Date.class) {

// 将String 转换 复杂数据类型

// value 是一个String 类型数组

String strDate = ((String[]) value)[0];

try {

return dateFormat.parse(strDate);

} catch (ParseException e) {

e.printStackTrace();

}

}

return super.convertValue(context, value, toType);

}

配置转换器 :

1) 局部配置 ,配置Action中含有特殊 属性类型,需要转换器 ActionClassName-conversion.properties (放到Action 所在包) ---- 针对Action的属性的

配置格式 : 属性名 = 转换器  buytime=cn.itcast.struts2.demo3.MyDateConvertor

* 局部配置只对当前Action 有效

2) 全局配置,让系统中所有java.util.Date 类型 都使用 cn.itcast.struts2.demo3.MyDateConvertor 配置 xwork-conversion.properties (放到src根目录) --- 针对类型

配置格式 :类型 = 转换器  java.util.Date = cn.itcast.struts2.demo3.MyDateConvertor

4. 类型转换错误 处理

如果在类型转换中 出现错误, 服务器端 会调用 addFieldError 添加错误信息, 自动跳转 逻辑视图input

<interceptor name="conversionError" class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"/> 负责类型转换错误的处理

1) 出错后,在<action> 内部配置 result name="input" 跳转到提交页面

2) 在提交页面,显示错误信息

<!-- 引入struts 标签库 -->

<%@ taglib uri="/struts-tags"  prefix="s"%>

<!-- 显示错误信息 -->

<s:fielderror></s:fielderror>

3) 在Action类所在包 创建 类名.properties  例如 cn.itcast.struts2.demo3.ProductAction 在 cn.itcast.struts2.demo3包下 创建 ProductAction.properties

信息配置格式: invalid.fieldvalue.属性名= 错误信息

时间: 2024-10-11 10:55:03

JavaEE----Action接受请求参数的相关文章

JAVAWEB开发之Struts2详解(二)——Action接受请求参数、类型转换器、使用Struts2的输入校验、以及遵守约定规则实现Struts2的零配置

Action接受请求参数 作为MVC框架,必须要负责解析HTTP请求参数,并将其封装到Model对象中 Struts2提供了非常强大的类型转换机制用于请求数据 到 model对象的封装 Struts2和MVC定义关系 StrutsPrepareAndExecuteFilter:控制器 在Struts2中action是什么?(Struts2是一个MVC框架) V:jsp M:action C:action StrutsPrepareAndExecuteFilter Struts2提供了三种数据封装

Springmvc之接受请求参数二

Springmvc之接受请求参数 准备工作 新建一个表单提交 请求地址: http://localhost:8080/ProjectName/user/login.do <form action="<%=request.getContextPath()%>/user/login.do" method="post"> username:<input type="text" name="username&quo

action中请求参数获取的两种方式

action中请求参数获取的两种方式 1.属性驱动? a.直接在 action 类中提供与请求参数匹配属性,提供 get/set 方法? b.在 action 类中创始一个 javaBean,对其提供 get/set ,在请求时页面上要进行修改,? 例如 user.username user.password ,要使用 ognl 表达式? 以上两种方式的优缺点:? 第一种比较简单,在实际操作我们需要将 action 的属性在赋值给模型(javaBean)去操作? 第二种:不需要在直接将值给 ja

Struts2学习笔记(六)——Action处理请求参数

在struts2框架中关于Action处理请求参数有两种方案(三个方式),表单属性的名称应该和在Action类中定义的成员属性或者在JavaBean中定义的成员属性名称一样: 1.属性驱动 1)直接在Action类中定义成员属性来接收请求参数 (将Action当成javaBean),在Action中还需要定义成员属性的setter方法. 表单信息: 1 <form action="${pageContext.servletContext.contextPath}/testAction.ac

struts2 action接收请求参数和类型转换

1,action接收请求参数 在struts2中action是什么?(struts2是一个mvc框架)         V:jsp        M:action         C:action  StrutsPrepareAndExecuteFilter 在struts2中获取请求参数: a.属性驱动            1.直接将action做一个model,就可以得到请求参数.                问题1:action封装请求参数,会不会存在线程安全问题?          

Action处理请求参数

第一种 :Action 本身作为model对象,通过成员setter封装 (属性驱动 ) 第一种方式:<br> <form action="${pageContext.request.contextPath}/MyAction1" method="post"> username:<input type="text" name="username"><br> password:&l

action接收请求参数

一.采用基本类型接收请求参数(get/post)在Action类中定义与请求参数同名的属性,struts2便能接收自动接收请求参数并赋给同名属性. action的代码: Java代码   public class ParamAction { private Integer id; private String name; public String execute(){ return "success"; } public void setId(Integer id) { //通过反射

Action获取请求参数的3中方式

方式一:Action本身作为Model对象,通过属性注入(Setter)方法讲参数数据封装到Action中 具体为:在Action中,提供和参数名相同的几个属性,并为其提供set方法,那么,该参数会被自动封装 到该几个属性中. 方式二:创建独立的Model对象,还是通过属性注入的方法将请求数据封装到Model对象中 具体为:另外创建一个专门的类,并在其中添加几个和请求参数名相同的属性,,此时,在表单中,需要讲参数名, 写成Model的一个具体对象名.参数名的方式,然后在Action中,需要定义一

jsp或Action获取请求参数中文乱码

普通情况下,中文字符会被自动转换成iso-8859-1的编码格式通过网络传输,而这种格式是没办法直接表示出我们认识的中文字符的,所以还要手动将他转换回之前的字符集. 一般在servlet或者action之前加一个字符过滤器就可以解决这个问题了. 看一下jsp页面的编码,如果是utf-8就写成下面的这样获取参数就可以了,如果是其他编码就替换下面 "utf-8"成实际编码:String username = new String(request.getParameter("tPa