关于URL生成以及RestfulActionMapper的问题

做了几乎一年的Eclipse RCP开发,最近要做一网站项目,我选择webwork,这也是我第一次使用webwork。
感觉webwork默认的 dispatcher manager 要求的URL太丑了,多了个.action,看起来很不舒服。我想找一个类似 rails 那样的
找呀找,让我找到 RestfulActionMapper 这个类,符合我的要求。

我在页面中使用 VTL, 没有用 ww 的 标签。这样根据 action 生成 url 怎么办呢? 我不想硬编码。

于是我在一个 BaseAction 中写下以下代码:

java 代码
 
  1. public abstract class BaseAction extends ActionSupport implements ServletRequestAware {  
  2.       
  3.     protected HttpServletRequest request;  
  4.     protected Helper helper;  
  5.       
  6.     public void setServletRequest(HttpServletRequest request) {  
  7.         this.request = request;  
  8.     }  
  9.       
  10.     public Helper getHelper() {  
  11.         if (helper == null) {  
  12.             helper = new Helper();  
  13.         }  
  14.         return helper;  
  15.     }  
  16.       
  17.     public class Helper implements Serializable {  
  18.         private static final long serialVersionUID = 1L;  
  19.   
  20.         public String url(String action, String params) {  
  21.             String[] parts = params.split(",");  
  22.             Map
  23.             for (String part : parts) {  
  24.                 String[] t = part.split(":");  
  25.                 map.put(t[0].trim(), t[1].trim());  
  26.             }  
  27.               
  28.             ActionMapper manager = ActionMapperFactory.getMapper();  
  29.             ActionMapping mapping = manager.getMapping(request);  
  30.             mapping.setNamespace(request.getContextPath() + "/");  
  31.             mapping.setName(action);  
  32.             mapping.setParams(map);  
  33.             return manager.getUriFromActionMapping(mapping);  
  34.         }  
  35.     }  
  36. }  

我想在我的前台页面,这样产生 url:

xml 代码
 
  1.   
  2. ...  



可是,它并没有产生像这样的 url:

xml 代码
  1. http://.../shops/region/1  

于是我又找呀找,找到了 RestfulActionMapper  的代码:

竟然是这样:

java 代码
 
  1. ...  
  2.     public String getUriFromActionMapping(ActionMapping mapping) {  
  3.         String base = mapping.getNamespace() + mapping.getName();  
  4.         for (Iterator iterator = mapping.getParams().entrySet().iterator(); iterator.hasNext();) {  
  5.             Map.Entry entry = (Map.Entry) iterator.next();  
  6.             String name = (String) entry.getKey();  
  7.             if (name.equals(mapping.getName() + "Id")) {  
  8.                 base = base + "/" + entry.getValue();  
  9.                 break;  
  10.             }  
  11.         }  
  12.   
  13.         return base;  
  14.     }  
  15. ...  

小弟首次用 webwork ,比较愚昧

可是不能这样算了(搞不定这些,老板会骂呀), 我写了下面代码:

java 代码
 
  1. public class BetterRestfulActionMapper extends RestfulActionMapper {  
  2.   
  3.     @SuppressWarnings("unchecked")  
  4.     @Override  
  5.     public String getUriFromActionMapping(ActionMapping mapping) {  
  6.         String url = mapping.getNamespace() + mapping.getName();  
  7.         System.out.println(url);  
  8.         Map
  9.         String idKey = mapping.getName() + "Id";  
  10.         String idValue = params.get(idKey);  
  11.         if (idValue != null) {  
  12.             url = url + "/" + idValue;  
  13.         }  
  14.         for (Entry
  15.             if (!entry.getKey().equals(idKey)) {  
  16.                 url = url + "/" + entry.getKey() + "/" + entry.getValue();  
  17.             }  
  18.         }  
  19.           
  20.         return url;  
  21.     }  
  22. }  


然后,我修改了 webwork.properties 文件

xml 代码
 
  1. webwork.mapper.class=com.longthsoft.deliver.dispatcher.mapper.BetterRestfulActionMapper  

问题算是解决了, 可是我想知道你们都是怎么办的?
初次用 webwork,还望各位老手多多指教。
小弟成长的路上有你们伴随,幸福无比!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值