接收请求参数:
- 采用基本类型接收请求参数(get/post)
在action类中定义与请求参数同名的属性,struts2便能自动接收请求参数并赋予给同名属性。
请求路径:http://localhost:8080/test/hello.action?id=78
public class HelloAction(){
private Integer id ;
public void setId(Integer id){//struts2通过反射技术调用与请求参数同名的属性的setter方法来获取请求参数值
this.id = id ;
}
public Integer getId(){return id;}
}
- 采用复合类型接收请求参数
请求路径:http://localhost:8080/test/hello.action?user.id=78
public class HelloAction(){
private User user;
public void setUser(User user){
this.user = user;
}
public User getUser(){return user;}
}
struts2首先通过反射技术调用User的默认构造器创建User对象,然后再通过反射技术调用user中与请求参数同名的属性的setter方法来获取请求参数的值。
bean:
public class Person {
private String name;
private Integer id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
HelloWorldAction:
public class HelloWorldAction {
private Integer id;
private String name;
private Person person;
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String addUI(){
return "success";
}
public String execute() throws Exception{
return "success";
}
}
index.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
<form action="<%=request.getContextPath()%>/control/employee/list_execute.action" method="post">
id:<input type="text" name="person.id"><br/>
name:<input type="text" name="person.name"><br/>
<input type="submit" value="发送"/>
</form>
</body>
</html>
add.jsp:
<%@ page language="java" import="java.util.*,java.net.URLDecoder" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'employeeAdd.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
<%= URLDecoder.decode(new String(request.getParameter("username").getBytes("ISO8859-1"),"UTF-8"),"UTF-8") %>
<form action="/xxx">
姓名:<input type="text" name="xxx">
</form>
</body>
</html>
关于struts2.1.6接收中文请求参数乱码问题
struts2.1.6中存在一个bug,即接收到中文请求参数为乱码(以post方式提交),原因是struts2.1.6在获取并使用了请求参数才调用HttpServletRequest的setCharacterEncoding()方法进行编码设置,导致应用使用的就是乱码请求参数。该bug在2.1.8中已解决,如若解决,则可以这样做:新建一个filter,将这个filter放在struts的filter之前,然后在doFilter()方法里添加如下代码:
public void doFilter(...){
HttpServletRequest req = (HttpServletRequest)request;
req.setCharacterEncoding("UTF-8");//根据自己使用的编码替换成UTF-8;
filterchain.doFilter(request,response);
}