Конкретный шаблон подстановочных знаков не работает в моем файле struts.xml

У меня есть приложение в struts 2.3, и я обрабатывал все запросы по шаблону «/*», чтобы перейти к моему приложению struts в web.xml, все в порядке, и запросы поступают в приложение 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>

URL-адреса: localhost:8080/en, localhost:8080/en123 в порядке

но я хочу что-то вроде этого:

локальный хост: 8080/en/что-то

и

локальный: 8080/en/что-то/больше

также я пробовал en ** и / en ** и / en / **, но безрезультатно.

это ошибка, которую я получил на этом URL-адресе localhost:8080/en/something

Статус HTTP 404 – /exciting/en/pages/sensational.jsp // в моем приложении exciting — root.


person Mohammadreza Khatami    schedule 19.06.2016    source источник
comment
Вопросы, требующие помощи в отладке (почему этот код не работает?), должны включать желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для их воспроизведения, в самом вопросе. Вопросы без четкой формулировки проблемы бесполезны для других читателей. См.: Как создать минимальный, полный и проверяемый пример.   -  person Roman C    schedule 19.06.2016
comment
Прочтите struts.apache.org/docs/namespace-configuration.html и struts.apache.org/docs/.   -  person Aleksandr M    schedule 21.06.2016


Ответы (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 в своем действии, просто добавив String type с сеттером и геттером.

PS: сейчас не могу проверить, но вроде работает.

person Alireza Fattahi    schedule 22.06.2016
comment
на самом деле тип не нужно где-то хранить. я просто хотел локализовать свой сайт с любого URL-адреса после /en . - person Mohammadreza Khatami; 23.06.2016