特定的通配符模式在我的struts.xml中不起作用

时间:2016-06-19 11:06:00

标签: struts2 wildcard xml-configuration

我在struts 2.3中有一个应用程序并通过'/ *'模式处理所有请求以转到web.xml中的struts应用程序 没关系,请求是struts应用程序。 但问题出在我的 struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

   <constant name="struts.enable.SlashesInActionNames" value="true"/>
   <constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>

   <package name="default" namespace="/" extends="struts-default">
      <action name="en/*" class="ir.mr.khatami.action.SensationalRequestAction" method="respond">
        <param name="locale">en</param>
        <result name="reload">pages/sensational.jsp</result>
      </action>

   </package>

</struts>
我在Web.xml中

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>

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

urls:localhost:8080 / en,localhost:8080 / en123没问题

但我想要这样的事情:

localhost:8080 / en / something

本地主机:8080 / EN /东西/更

我也试过en **和/ en **和/ en / **但没有结果。

这是我在这个网址上收到的错误localhost:8080 / en / something

HTTP状态404 - /exciting/en/pages/sensational.jsp //令人兴奋的是我的应用中的root。

1 个答案:

答案 0 :(得分:1)

请查看

https://struts.apache.org/docs/wildcard-mappings.html

高级标题提及:

  

从2.1.9+中可以定义正则表达式在动作中定义   名称。要使用这种形式的通配符,必须使用以下常量   设置:

<constant name="struts.enable.SlashesInActionNames" value="true"/>
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
<constant name="struts.patternMatcher" value="regex" />

所以你的映射必须是

<action name="en/{type}" ...

您只需将type添加到setter和getter即可阅读操作中的String type值。

PS:我现在无法测试,但似乎有效