课时11
- 动态方法调用
如果Action中存在多个方法时,可以使用!+方法名调用指定方法。(不推荐使用)
1 public String execute(){ 2 setMsg("execute"); 3 return "success"; 4 } 5 6 public String add(){ 7 setMsg("add"); 8 return "success"; 9 }
假设访问上面action的URL路径为: /struts/test/list.action 要访问action的add() 方法,我们可以这样调用:/struts/test/list!add.action
- 使用通配符定义action
1 <package name="struts2" namespace="/test" extends="struts-default"> 2 <action name="list_*" class="tutorial.HelloWorld" method="{1}"> 3 <result name="success">/Test.jsp</result> 4 </action> 5 </package>
课时12
- 接收请求参数
在Action类中定义与请求参数同名的属性,struts2便能自动接收请求参数并赋予给同名属性。
struts2通过反射技术调用与请求参数同名的属性的setter方法来获取请求参数值。
请求路径:http://localhost:8081/Struts2Demo/test/list_execute?id=111&name=jaid
1 private int id; 2 private String name; 3 public int getId() { 4 return id; 5 } 6 7 public void setId(int id) { 8 this.id = id; 9 } 10 11 public String getName() { 12 return name; 13 } 14 15 public void setName(String name) { 16 this.name = name; 17 }
post方式
1 <form action="<%=request.getContextPath() %>/test/list_add.action" method="post"> 2 id:<input type="text" name="id"><br> 3 name:<input type="text" name="name"><br> 4 <input type="submit" value="submit"> 5 </form>
采用复合类型接收请求参数(提供默认构造器)
1 <form action="<%=request.getContextPath() %>/test/list_add.action" method="post"> 2 id:<input type="text" name="person.id"><br> 3 name:<input type="text" name="person.name"><br> 4 <input type="submit" value="submit"> 5 </form>
-
struts2.1.6版本中存在一个Bug,即接收到的中文请求参数为乱码(以post方式提交),原因是struts2.1.6在获取并使用了请求参数后才调用HttpServletRequest的setCharacterEncoding()方法进行编码设置 ,导致应用使用的就是乱码请求参数。这个bug在struts2.1.8中已经被解决,如果你使用的是struts2.1.6,要解决这个问题,你可以这样做:新建一个Filter,把这个Filter放置在Struts2的Filter之前,然后在doFilter()方法里添加以下代码
1 public void doFilter(...){ 2 3 HttpServletRequest req = (HttpServletRequest) request; 4 5 req.setCharacterEncoding("UTF-8");//应根据你使用的编码替换UTF-8 6 7 filterchain.doFilter(request, response); 8 9 }