在Struts中,我找不到合适的通配符模式来将我的URL部分提取到动作参数中。
这就是我设置动作的方式。该模式的目的是捕获最后两个路径元素,然后捕获可能位于它们之前的所有元素。
<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会给我提供regex匹配,但是当我超过2.0.8时,Struts的依赖关系和我的OSGi环境出现了问题,所以现在我想继续使用这个版本。