Action中的方法调用和自定义类型转换器
2012-06-03 20:38
274 查看
一,调用Action中的方法
public
class Demo1Action {
。。。
public String save(){
System.out.println("我是save方法");
return
"savePage";
}
public String update(){
System.out.println("我是update方法");
return
"update";
}
}
1,动态方法调用
http://localehost:8080/工程名/namespace名/test!save.action
通过一个“!”+ 方法的名字来调用Action中的方法
对于动态方法的调用,可以通过一个常量来设置
<constant
name="struts.enable.DynamicMethodInvocation"value="false"/>
2,通配符调用(推荐使用)
<action
name="test_*Method"
class="..."
method="{1}">
<result
name="success">/show.jsp</result>
</action>
这里可以使用多个通配符:如*Test_* , 还要注意的是,{}不仅可以使用在method=””里面,还可以使用在result的names属性里面,或者是在<result></result>里面
注意:{}是以1开始,不是0
访问地址:
http://localehost:8080/工程名/namespace名/test_saveMethod.action
二,接收get/post的参数
注意:如果想struts2帮我们注入参数,或者让页面得到参数,那么一定要记得给属性生成setter和getter方法
public
class Demo2Action {
private String
username;
private Person person;
。。。//setter getter方法以及Action的方法
}
·get方式的传值
简单的属性值:(Action会自动接收)
<a href=”${pageContext.request.contextPath}/hwt/demo.action?username=hwt”>get传值</a>
传入对象的属性:
<a href=”${pageContext.request.contextPath}/hwt/demo.action?person.age=18”>get传值</a>
·post传值
<form action=””method=”post” >
<input type=”text” name=”username”/>
<input type=”text” name=”person.age”/>
<input type=”submit” value=”提交” />
</form>
struts2.1.6版本中存在一个Bug,即接收到的中文请求参数为乱码(以post方式提交),原因是struts2.1.6在获取并使用了请求参数后才调用HttpServletRequest的setCharacterEncoding()方法进行编码设置,导致应用使用的就是乱码请求参数。这个bug在struts2.1.8中已经被解决,如果你使用的是struts2.1.6,要解决这个问题,你可以这样做:新建一个Filter,把这个Filter放置在Struts2的Filter之前,然后在doFilter()方法里添加以下代码
public void doFilter(...){
HttpServletRequestreq = (HttpServletRequest) request;
req.setCharacterEncoding("UTF-8");//应根据你使用的编码替换UTF-8
filterchain.doFilter(request,response);
}
三,自定义类型的转换器
1,先建立一个类继承DefaultTypeConverter,重写convertValue(Map,object,class)这个方法
2,写个配置文件:
a,action级别—在Action所在的包中,名字为ActionClassName-conversion.properties,
名字是固定的,除了ActionClassName以外,属性文件中的内容为:
待转的属性名字=转换器的全类名
b,全局—在类文件下,名字为xwork-conversion.properties,名字是固定的,属性文件的内容为:
待转类型=转换器的全类名
如:java.util.Date类型的属性可以接收格式为2009-07-20的请求参数值。但如果我们需要接收格式为20091221的请求参数,我们必须定义类型转换器,否则struts2无法自动完成类型转换。
importjava.util.Date;
publicclass person{
private Datebirthday; //能接收2012-6-3但是接收不了20120603
public Date getBirthday () {
return birthday;
}
public void setBirthday(Date birthday) {
this. birthday = birthday;
}
}
1,建立实现类
public class DateConverter extendsDefaultTypeConverter {
public Object convertValue(Map context, Object value, Class toType) {
SimpleDateFormatdateFormat = new SimpleDateFormat("yyyyMMdd");
try{
if(toType== Date.class){//当字符串向Date类型转换时
String[]params = (String[]) value;// Request.getParameterValues()
returndateFormat.parse(params[0]);
}elseif(toType == String.class){//当Date转换成字符串时
Datedate = (Date) value;
returndateFormat.format(date);
}
}catch (ParseException e) {}
returnnull;
}
}
2,建立配置文件
Action :名字:PersonAction-conversion.properties
内容为:birthday=hwt.convertor.DateConverter
全局:名字:xwork-conversion.properties
内容为:java.util.Date=hwt.convertor.DateConverter
public
class Demo1Action {
。。。
public String save(){
System.out.println("我是save方法");
return
"savePage";
}
public String update(){
System.out.println("我是update方法");
return
"update";
}
}
1,动态方法调用
http://localehost:8080/工程名/namespace名/test!save.action
通过一个“!”+ 方法的名字来调用Action中的方法
对于动态方法的调用,可以通过一个常量来设置
<constant
name="struts.enable.DynamicMethodInvocation"value="false"/>
2,通配符调用(推荐使用)
<action
name="test_*Method"
class="..."
method="{1}">
<result
name="success">/show.jsp</result>
</action>
这里可以使用多个通配符:如*Test_* , 还要注意的是,{}不仅可以使用在method=””里面,还可以使用在result的names属性里面,或者是在<result></result>里面
注意:{}是以1开始,不是0
访问地址:
http://localehost:8080/工程名/namespace名/test_saveMethod.action
二,接收get/post的参数
注意:如果想struts2帮我们注入参数,或者让页面得到参数,那么一定要记得给属性生成setter和getter方法
public
class Demo2Action {
private String
username;
private Person person;
。。。//setter getter方法以及Action的方法
}
·get方式的传值
简单的属性值:(Action会自动接收)
<a href=”${pageContext.request.contextPath}/hwt/demo.action?username=hwt”>get传值</a>
传入对象的属性:
<a href=”${pageContext.request.contextPath}/hwt/demo.action?person.age=18”>get传值</a>
·post传值
<form action=””method=”post” >
<input type=”text” name=”username”/>
<input type=”text” name=”person.age”/>
<input type=”submit” value=”提交” />
</form>
struts2.1.6版本中存在一个Bug,即接收到的中文请求参数为乱码(以post方式提交),原因是struts2.1.6在获取并使用了请求参数后才调用HttpServletRequest的setCharacterEncoding()方法进行编码设置,导致应用使用的就是乱码请求参数。这个bug在struts2.1.8中已经被解决,如果你使用的是struts2.1.6,要解决这个问题,你可以这样做:新建一个Filter,把这个Filter放置在Struts2的Filter之前,然后在doFilter()方法里添加以下代码
public void doFilter(...){
HttpServletRequestreq = (HttpServletRequest) request;
req.setCharacterEncoding("UTF-8");//应根据你使用的编码替换UTF-8
filterchain.doFilter(request,response);
}
三,自定义类型的转换器
1,先建立一个类继承DefaultTypeConverter,重写convertValue(Map,object,class)这个方法
2,写个配置文件:
a,action级别—在Action所在的包中,名字为ActionClassName-conversion.properties,
名字是固定的,除了ActionClassName以外,属性文件中的内容为:
待转的属性名字=转换器的全类名
b,全局—在类文件下,名字为xwork-conversion.properties,名字是固定的,属性文件的内容为:
待转类型=转换器的全类名
如:java.util.Date类型的属性可以接收格式为2009-07-20的请求参数值。但如果我们需要接收格式为20091221的请求参数,我们必须定义类型转换器,否则struts2无法自动完成类型转换。
importjava.util.Date;
publicclass person{
private Datebirthday; //能接收2012-6-3但是接收不了20120603
public Date getBirthday () {
return birthday;
}
public void setBirthday(Date birthday) {
this. birthday = birthday;
}
}
1,建立实现类
public class DateConverter extendsDefaultTypeConverter {
public Object convertValue(Map context, Object value, Class toType) {
SimpleDateFormatdateFormat = new SimpleDateFormat("yyyyMMdd");
try{
if(toType== Date.class){//当字符串向Date类型转换时
String[]params = (String[]) value;// Request.getParameterValues()
returndateFormat.parse(params[0]);
}elseif(toType == String.class){//当Date转换成字符串时
Datedate = (Date) value;
returndateFormat.format(date);
}
}catch (ParseException e) {}
returnnull;
}
}
2,建立配置文件
Action :名字:PersonAction-conversion.properties
内容为:birthday=hwt.convertor.DateConverter
全局:名字:xwork-conversion.properties
内容为:java.util.Date=hwt.convertor.DateConverter
相关文章推荐
- struts2中怎么覆盖默认错误信息以及两种自定义类型转换器的方法
- AllJoyn-跨平台方法调用返回值为自定义类型
- 找到多个与名为“HOME”的控制器匹配的类型。如果为此请求(“{CONTROLLER}/{ACTION}/{ID}”)提供服务的路由在搜索匹配此请求的控制器时没有指定命名空间,则会发生此情况。如果是这样,请通过调用含有“NAMESPACES”参数的“MAPROUTE”方法的重载来注册此路由。
- Struts2自定义Action,自定义方法,DMI(动态方法调用),路径问题
- Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库 自定义日志记录功能,按日记录,很方便 C#常量和字段以及各种方法的语法总结 类型,对象,线程栈,托管堆在运行时的关系,以及clr如何调用静态方法,实例方法,和虚方法 asp.net webapi 自定义身份验证
- Mybatis实现自定义类型转换器TypeHandler的方法
- Struts2学习教程之自定义类型转换器的方法
- XFire实现自定义类型参数传递和调用返回自定义类型方法
- Dwr框架在客户端远程调用方法返回自定义类型的例子
- 用反射调用方法(带自定义类型的参数)问题
- DEDECMS自定义字段为附件类型调用链接地址的方法
- 自定义类型转换器(转换器的注册方法)
- Struts2.0深入学习 Strust2与Servlet API,Action多方法调用,result标签的type的类型
- 让泛型T在未给定数据类型时也能调用自定义数据类型的方法,T也能实例化
- Struts2-Action-4-系列问题(路径、调用Action的自定义方法、通配符)
- Oracle自定义数据类型 2 (调用对象方法)
- 使用反射调用类型成员 方法,字段,属性
- spring-boot 方法异步调用,自定义线程池配置使用
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(6):服务器端和客户端数据类型的自动转换:复杂类型