1. 接受请求参数

这里的参数可以是get方式提交的,也可以是post方式提交的

有两种方式:第一种方式,采用基本类型接收请求参数

原理是struts2采用了反射技术给action类的属性赋值

第二种方式,采用复合类型接收参数。

其内部是采用了反射技术,首先如果相应的类的对象为null,就调用默认的无参的构造方法生成一个实例,然后给实例的属性赋值

 框架学习之Struts2 第三节 请求参数的接收和自定义类型转换器

测试一:以get方式提交

在上节测试代码中的strutspackage.xml的名为yinger的package中添加以下的action

<action name="requestPara" class="com.yinger.HelloWorld"
method
="requestPara">
<result name="requestPara">/requestPara.jsp</result>
</action>
Person.java


package com.beans;

public class Person {

private String id;
private String name;

public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

}
在HelloWorld中添加以下内容:

private String requestPara;
private Person onePerson;

public String plaintext(){
message
= "HelloWorld.plaintext";
return "plaintext";
}

public String requestPara(){
message
= "HelloWorld.requestPara";
return "requestPara";
}

public String getRequestPara() {
return requestPara;
}
添加 requestPara.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'requestPara.jsp' starting page</title>
</head>

<body>
requestPara.jsp
<br>
requestPara:${requestPara }
<br>
person.id:${onePerson.id }
<br>
person.name:${onePerson.name }
<br>
</body>
</html>

测试结果:

1.http://localhost:8080/struts2test/yinger/requestPara?requestPara=yinger

框架学习之Struts2 第三节 请求参数的接收和自定义类型转换器

2.http://localhost:8080/struts2test/yinger/requestPara?onePerson.id=2

框架学习之Struts2 第三节 请求参数的接收和自定义类型转换器

3.http://localhost:8080/struts2test/yinger/requestPara?onePerson.name=yinger

框架学习之Struts2 第三节 请求参数的接收和自定义类型转换器

4.http://localhost:8080/struts2test/yinger/requestPara?onePerson.id=2&onePerson.name=yinger

框架学习之Struts2 第三节 请求参数的接收和自定义类型转换器

  

测试二:使用post方式

Person.java添加以下内容

private Date birthday;

public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
  
修改 index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ taglib uri="/struts-tags" prefix="s"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
</head>

<body>
<s:form method="post" action="requestPost" namespace="/yinger">
name:
<br><input name="onePerson.name" /><br>
id:
<br><input name="onePerson.id" /><br>

<input type="submit" name="submit" value="提交" /><br>
</s:form>
</body>
</html>
同样的,在刚才的action下面添加新的action

<action name="requestPost" class="com.yinger.HelloWorld"
method
="requestPost">
<result name="requestPost">/requestPara.jsp</result>
</action>

   

测试结果:

编辑,点提交

框架学习之Struts2 第三节 请求参数的接收和自定义类型转换器 

结果视图:

框架学习之Struts2 第三节 请求参数的接收和自定义类型转换器

2. 解决struts2.1.6 中接收中文请求的参数乱码的问题的方法

没有测试过!

这里有一个很好的解释和代码展示:http://www.iteye.com/topic/483158

以前学习JavaWeb时还学过一个方法:修改 Tomcat的配置文件 server.xml 

    <Connector port="8080" protocol="HTTP/1.1"  connectionTimeout="20000" 

      redirectPort="8443" URIEncoding="UTF-8" />  

在这里设置了编码方式就可以防止请求参数中文乱码的问题,但是有一个缺点就是它会作用于所有的web应用,修改了这个配置就会影响其他的应用

如果都是同一种编码方式那也没有问题,呵呵呵呵

框架学习之Struts2 第三节 请求参数的接收和自定义类型转换器

3. struts2提供了两种类型转换器

①全局类型转换器

②局部类型转换器

框架学习之Struts2 第三节 请求参数的接收和自定义类型转换器

局部类型转换器:ActionName-conversion.properties

框架学习之Struts2 第三节 请求参数的接收和自定义类型转换器

导入包时: 两者选择哪个都可以,视频老师说是测试过了,我是用的上者,注意他们要重写的方法是不同的,并且建议你使用上者,我两个都试了试,呵呵

框架学习之Struts2 第三节 请求参数的接收和自定义类型转换器

全局类型转换器:xwork-conversion.properties

框架学习之Struts2 第三节 请求参数的接收和自定义类型转换器

测试代码:

修改index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'reuqestPara.jsp' starting page</title>
</head>

<body>
requestPara.jsp
<br>
time:{time}
<br>
person.id:${onePerson.id }
<br>
person.name:${onePerson.name }
<br>
person.birthday:${onePerson.birthday }
<br>
</body>
</html>  
类型转换类


package com.convertion;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;

public class DateConvertion extends DefaultTypeConverter{

//这个convertValue是双向的,既有从页面得到请求的参数,转换成后台的的对应的类型
//也有从后台将处理的结果显示在前台,之前进行另外一次转型,转成String
@SuppressWarnings("rawtypes")
@Override
public Object convertValue(Map<String, Object> context, Object value,
Class toType) {
SimpleDateFormat sdf
=new SimpleDateFormat("yyyyMMdd");
try {
if(toType==Date.class){//String-->Date
String[] paras=(String[])value;//value=Request.getParameterValues()
return sdf.parse(paras[0]);
}
else if(toType==String.class){//Date-->String
Date date=(Date)value;
return sdf.format(date);
}
}
catch (Exception e) {
e.printStackTrace();
}
return null;
}

}
  
在com.yinger 包下面添加 属性文件

文件名:HelloWorld-conversion.properties

文件内容:
onePerson.birthday=com.convertion.DateConvertion
time=com.convertion.DateConvertion

   

测试结果:

1. 首先不添加那个属性文件,测试index.jsp,正确解析了Date   birthday

框架学习之Struts2 第三节 请求参数的接收和自定义类型转换器框架学习之Struts2 第三节 请求参数的接收和自定义类型转换器

2.测试index.jsp,格式为 yyyyMMdd 的解析错误

框架学习之Struts2 第三节 请求参数的接收和自定义类型转换器

框架学习之Struts2 第三节 请求参数的接收和自定义类型转换器

3.测试requestPara这个action,格式正确解析正确  time

框架学习之Struts2 第三节 请求参数的接收和自定义类型转换器

4.格式为 yyyyMMdd的解析错误  time

框架学习之Struts2 第三节 请求参数的接收和自定义类型转换器

5. 添加了 properties 这件之后! time,正确

框架学习之Struts2 第三节 请求参数的接收和自定义类型转换器

测试 index.jsp  解析正确

框架学习之Struts2 第三节 请求参数的接收和自定义类型转换器框架学习之Struts2 第三节 请求参数的接收和自定义类型转换器

  

4. 访问和添加 request / session / application 属性

可以 通过 ActionContext 来访问,得到的不是对象,而是一个相应的map

框架学习之Struts2 第三节 请求参数的接收和自定义类型转换器

获取 HttpServletRequest  /  HttpServletSession  / HttpServletResponse / ServletContext 对象

有两种方法:第一种方法,通过 ServletActionContext 直接获取

它可以得到对应的各种对象,但是大多数时候并不需要得到对应的对象,因为多数时候都只是set和get对应的对象的属性值

第二种方法,实现指定的接口,具体的什么时候执行类中的方法是由struts框架来决定的,它会在运行时注入相关的信息

框架学习之Struts2 第三节 请求参数的接收和自定义类型转换器

测试代码:

HelloWorld中添加方法

public String scope() {
ActionContext ctx
= ActionContext.getContext();
ctx.getApplication().put(
"app", "application范围");// 往ServletContext里放入app
ctx.getSession().put("ses", "session范围");// 往session里放入ses
ctx.put("req", "request范围");// 往request里放入req
return "scope";

}
  
添加新的action

<action name="scope" class="com.yinger.HelloWorld"
method
="scope">
<result name="scope">/scope.jsp</result>
</action>  
新的jsp:scope.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'scope.jsp' starting page</title>
</head>

<body>
application:${applicationScope.app }
<br>
session:${sessionScope.ses }
<br>
request:${requestScope.req }
<br>
</body>
</html>

  

测试结果:

框架学习之Struts2 第三节 请求参数的接收和自定义类型转换器

相关文章:

  • 2021-09-04
  • 2022-12-23
  • 2021-07-01
  • 2021-06-17
  • 2022-12-23
  • 2022-12-23
  • 2021-06-23
猜你喜欢
  • 2021-05-29
  • 2022-12-23
  • 2022-12-23
  • 2021-08-29
  • 2022-12-23
  • 2022-12-23
  • 2021-09-29
相关资源
相似解决方案