2013年2月18日 晴

被一个bug搞得我发神经,不过经过认真搜索,最后还是找到解决方案,这样才得以让小巫继续学习下去。

Struts2 第17part Dynamic Result动态结果集

之前,关于Action的动态方法调用,已经接触过动态这个概念了。然而动态结果又是怎么进行配置的呢? 关键还是在struts.xml配置文件当中。

先来说说自己遇到的bug是什么吧,动态配置结果用到的是OGNL表达式,项目原本是这样配置的。

  1. <action name="user" class="com.bjsxt.struts2.user.action.UserAction"> 
  2.             <result>${r}</result> 
  3.         </action>      

result标签里的用${r}这样的表达式来动态指定下一个Action,原本照这样配置,应该是没有什么问题的。但就是出错,之前以为是Struts2的版本问题,然后就去Web.xml修改Filter.但还是无济于事,最后上网查了很久,最终找到一个能解决自己问题的文章,自己稍微修改了一下,问题就这样解决了。

完整的struts.xml代码如下:

  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd"> 
  5.  
  6. <struts> 
  7.     <constant name="struts.devMode" value="true" /> 
  8.     <package name="user" namespace="/user" extends="struts-default"> 
  9.         <action name="user" class="com.wwj.struts2.user.action.UserAction"> 
  10.             <result>${r}.jsp</result> 
  11.         </action> 
  12.     </package> 
  13. </struts> 

我是将${r}改为${r}.jsp, 然后问题就解决了,感觉有点扯。对吧。

当然UserAction也要做相应的修改,把jsp后缀去掉就ok了。

  1. package com.wwj.struts2.user.action;  
  2.  
  3. import com.opensymphony.xwork2.ActionSupport;  
  4.  
  5. public class UserAction extends ActionSupport {  
  6.     private int type;  
  7.  
  8.     private String r;  
  9.       
  10.     public String getR() {  
  11.         return r;  
  12.     }  
  13.  
  14.     public void setR(String r) {  
  15.         this.r = r;  
  16.     }  
  17.  
  18.     public int getType() {  
  19.         return type;  
  20.     }  
  21.  
  22.     public void setType(int type) {  
  23.         this.type = type;  
  24.     }  
  25.  
  26.     @Override 
  27.     public String execute() throws Exception {  
  28.         // TODO Auto-generated method stub  
  29.         if(type == 1) r="/user_success";  
  30.         else if (type == 2) r="/user_error";  
  31.         return "success";  
  32.     }  
  33.       
  34.       
  35. }  

 

就这样,关于动态结果集配置的内容就这么多。我发现下面几个项目也是同样的问题。不过已经知道问题所在,我想应该能轻松解决。