我在寻找正确的通配符模式以将我的部分 URL 提取到 Struts 中的操作参数时遇到问题。
这就是我设置动作的方式。该模式的目的是捕获最后两个路径元素,然后捕获它们之前的所有内容。
<action name="**/*/*" class="com.example.ObjectAction">
<param name="filter">{1}</param>
<param name="type">{2}</param>
<param name="id">{3}</param>
</action>
使用 URL 调用它,channels/123/transmissions/456
我得到以下结果(该操作只是在 POJO 上设置输入参数并将其返回为 XML):
<result>
<filter>channels/123/transmissions</filter>
<id/>
<type>456</type>
</result>
它应该是:
<result>
<filter>channels/123</filter>
<id>456</id>
<type>transmissions</type>
</result>
现在,因为**
匹配包括斜杠在内的所有字符,我想我的模式允许不止一种方式来匹配 URL,而 Struts 恰好选择了一种id
留空的方式。是否在某处定义了多个可能匹配的行为?我可以使模式不那么模棱两可吗?有没有其他方法可以做到这一点?
我正在运行 Struts 2.0.8。升级到 2.1.9 会给我正则表达式匹配,但是当我超过 2.0.8 时,我遇到了 Struts 的依赖项和我的 OSGi 环境的麻烦,所以我现在想坚持那个版本。