首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

关于URL生成以及RestfulActionMapper的有关问题

2012-11-07 
关于URL生成以及RestfulActionMapper的问题做了几乎一年的Eclipse RCP开发,最近要做一网站项目,我选择webw

关于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,还望各位老手多多指教。
小弟成长的路上有你们伴随,幸福无比! 1 楼 bencode 2007-03-07   哈哈,今天使用 ww:form 时,才发现 RestfulActionMapper 没错,是我错了。

于是我删掉了 BetterRestfulActionMapper

又改回了:

webwork.mapper.class=com.opensymphony.webwork.dispatcher.mapper.RestfulActionMapper

然后改写了 url 这个方法,暂时解决了这个问题


2 楼 exo905 2007-06-26   很多开源的URL REWRITE的工具,楼主不用自己写吧 3 楼 bencode 2007-07-11   嘿嘿,开源的找起来麻烦,而且我也算webwork新手,所以研究研究对我也有好处.

见:
http://bencode.iteye.com/admin/show/81622 4 楼 kyvin 2007-07-26   我也是用url rewrite 蛮方便的

热点排行