0

跟进我的一个较早的问题,我设法让 URL 重写在我的 struts 项目中正常工作,其中 URL 之类的 URLsearch?q=blah被转换为 query search.action?q=blah。我们为此使用UrlRewriteFilter 。这似乎可以很好地转发到 struts(如果确保它具有与 FORWARD 的过滤器映射),但是当ParametersIntercepter运行时它似乎会捕获每个参数两次,并在其间添加逗号。所以以下内容:

search.action?q=blah

将 Criteria 对象上的参数 q(见进一步)设置为:

[ blah, blah ]

参数设置使用ModelDriven<Criteria>Where Criteria 是一个简单的类,其中包含要从 GET 字符串设置的一组属性。

我不知道为什么会发生这种情况。有没有人见过这样的事情?我在过滤器/拦截器方面做错了吗?

编辑:似乎ParametersInterceptor只是设置了 ActionContext 对象中包含的参数。我不确定(也没有看到任何指示的调试消息)这些值在 ActionContext 中的设置位置。有谁愿意澄清这一切应该如何运作?

4

2 回答 2

0

我还没有解决上面的奇怪行为,但是我设法在 url 重写中发现了一个错误,页面没有被重定向到“mySearch.action”而是“mySearch.action?”。现在使用带有固定规则的 url 重写并且不包括查询参数似乎可以正常工作。

编辑:我最终将此追溯到设置为同时侦听 REQUEST 和 FORWARD 的 urlrewritefilter 的问题。显然这会导致 GET 参数被解析两次。但是,我仍然不包括查询参数(因为这通常会使事情混淆),因此这可能无法完全解决问题。虽然它是最有可能的罪魁祸首。

特别是,我的过滤器映射现在看起来像:

<filter-mapping>
     <filter-name>UrlRewriteFilter</filter-name>
     <url-pattern>/*</url-pattern>
     <dispatcher>REQUEST</dispatcher>
</filter-mapping>
于 2009-02-24T09:21:24.590 回答
0

以防万一您可能仍然对额外的信息感兴趣,您是否知道最新版本的 Struts2(即 2.1.?)不会对.action您的操作进行扩展?事实上,您根本不需要任何扩展!

如果我没记错的话,唯一的要求是,在 中web.xml,将 Struts2 过滤器 ( org.apache.struts2.dispatcher.FilterDispatcher) 映射到 url-pattern:/*

<filter-mapping>
   <filter-name>action2</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

从那时起,<s:url>出现在扩展名为空的页面上的标签将依次生成一个没有扩展名的 url...

于 2009-03-19T03:44:04.947 回答