精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-02-06
不过试用中发现一个问题,提请大家讨论,目前已被证明的确是一个bug 比如你在浏览器中键入一个url http://localhost/iweb/dwr/ 这个url 是虚拟的,但不映射任何action ,struts2 会替你查找action ,如果找不到就会 引用 There is no Action mapped for action name dwr. There is no Action mapped for action name dwr. - [unknown location] com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:177) com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory 。。。。。。 其实应该有一个配置,指明那些规则的url 不需要匹配action,可是目前没有发现 详见bug 讨论 https://issues.apache.org/struts/browse/WW-2969;jsessionid=694C1010E63EA0D2FA5434A1B5BEE14E?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel 作者也列出了几种解决的这种办法! 谁有更好的解决办法,请发出讨论之 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-02-06
最后修改:2009-02-06
目前似乎没有什么很好的解决方案。其实也不算什么bug,只是一个plugin没有理由考虑其他plugin的情况,所以convention plugin仅仅支持无后缀的情况。
你可以自己写一个Filter,去覆盖plugin的Filter,并为你的dwr的请求设置一个.dwr这样的后缀,然后指定某些可配置的后缀,也走Struts2的Action,代码可以参考我的LightURL,我就是这么做的。 |
|
返回顶楼 | |
发表时间:2009-02-06
写过filter 不过考虑到升级的愿因,放弃filter了
可能是我没说明白,不是dwr后缀的请求,而是某种路径的请求,比如 /somepa/xss/ 类似,现实项目中,某些url 需要访问,但不需要映射到action,如果使用了插件,他就试图给所有无后缀的url 都匹配 |
|
返回顶楼 | |
发表时间:2009-02-06
kjj 写道 写过filter 不过考虑到升级的愿因,放弃filter了
可能是我没说明白,不是dwr后缀的请求,而是某种路径的请求,比如 /somepa/xss/ 类似,现实项目中,某些url 需要访问,但不需要映射到action,如果使用了插件,他就试图给所有无后缀的url 都匹配 后缀我只是举个例子,你可以配置嘛,配成类似antPath风格的路径设置,然后在你的Filter里面去过滤啊。 写Filter和升级有什么关系? |
|
返回顶楼 | |
发表时间:2009-02-06
請問convention plugins支不支持一個action多個方法如
xxx_list.do ->返回"list"則找xxx/list.jsp xxx_edit.do ->返回"edit"則找xxx/edit.jsp |
|
返回顶楼 | |
发表时间:2009-02-06
downpour 写道 kjj 写道 写过filter 不过考虑到升级的愿因,放弃filter了
可能是我没说明白,不是dwr后缀的请求,而是某种路径的请求,比如 /somepa/xss/ 类似,现实项目中,某些url 需要访问,但不需要映射到action,如果使用了插件,他就试图给所有无后缀的url 都匹配 后缀我只是举个例子,你可以配置嘛,配成类似antPath风格的路径设置,然后在你的Filter里面去过滤啊。 写Filter和升级有什么关系? 哦,看来理解错了,我以为要继承原来的filter 呢! |
|
返回顶楼 | |
发表时间:2009-02-06
yb31 写道 請問convention plugins支不支持一個action多個方法如
xxx_list.do ->返回"list"則找xxx/list.jsp xxx_edit.do ->返回"edit"則找xxx/edit.jsp 可以通过action 注释配置这种情况,详情请看其文☭ |
|
返回顶楼 | |
发表时间:2009-02-06
这个plugin没有用过,不过对于无效的url转到你自己指定的页面是可以实现的。
可以看看struts2的源代码,DefaultActionMapper的getMapping方法 public ActionMapping getMapping(HttpServletRequest request, ConfigurationManager configManager) { ActionMapping mapping = new ActionMapping(); String uri = getUri(request); int indexOfSemicolon = uri.indexOf(";"); uri = (indexOfSemicolon > -1) ? uri.substring(0, indexOfSemicolon) : uri; uri = dropExtension(uri, mapping); if (uri == null) { return null; } parseNameAndNamespace(uri, mapping, configManager); handleSpecialParameters(request, mapping); if (mapping.getName() == null) { return null; } parseActionName(mapping); return mapping; } 它默认找不到就返回null,你可以重写ActionMapper的实现,当找不到时,自动返回一个默认的ActionMapping ,然后把默认的配置 <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="struts" class="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" /> 替换掉,这样到可以实现你的需求。 |
|
返回顶楼 | |
发表时间:2009-02-07
最后修改:2009-02-07
kjj 写道 yb31 写道 請問convention plugins支不支持一個action多個方法如
xxx_list.do ->返回"list"則找xxx/list.jsp xxx_edit.do ->返回"edit"則找xxx/edit.jsp 可以通过action 注释配置这种情况,详情请看其文☭ 每个方法都要注释配置那就比原来更麻烦了.是否能零配置默认支持的才好 |
|
返回顶楼 | |
发表时间:2009-02-07
比原来麻烦不了多少,原来要写xml的,每个action 每个方法还不都得写!
|
|
返回顶楼 | |