Отображение действий в Struts2

В настоящее время перенос приложения со Struts1 на Struts2. Когда я нажимаю кнопку отправки, мне выдается сообщение об ошибке: Нет действия, сопоставленного с именем действия requestInput. Что не так с моим кодом, что является причиной этой ошибки?

веб.xml

<web-app>
    <display-name>My Project</display-name>

    <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>

    <!-- The Usual Welcome File List -->
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

</web-app>

struts.xml

<struts>
    <include file="struts-default.xml" />
    <constant name="struts.custom.i18n.resources" value="global" />
    
    <package name="default" namespace="/" extends="struts-default">
        <interceptors>
            <interceptor-stack name="uploadFile">
                <interceptor-ref name="fileUpload" />
                <interceptor-ref name="uploadForm" />
                <interceptor-ref name="modelDriven" />
                <interceptor-ref name="basicStack" />
            </interceptor-stack>
        </interceptors>
        

        <action name="requestInput" class="com.class.action.FileAddAction" method="execute">
            <result>/result.jsp</result>
        </action>


    </package>
</struts>

FileAdd.jsp

<s:form method="POST" action="requestInput" enctype="multipart/form-data">
...
<s:submit property="submit" style="background:#dccaa0" value="Submit" theme="simple"/>
...
</s:form>

FileAddAction.jsp

public final class FileAddAction extends ActionSupport implements SessionAware, ServletRequestAware {
...
public String execute() throws Exception{
...
}
}

И мой файл struts.xml находится в папке Java src и в папке WEB-INF. Что еще я могу сделать, чтобы исправить это? Спасибо..


person whatever255    schedule 23.06.2020    source источник
comment
Какая версия S2? Пакет ng больше так не называется. Вам не нужно вручную включать конфигурацию struts-default; ваш пакет уже расширяет struts-default. Вам не нужно указывать method по умолчанию для действий. Я бы сначала проверил ваши журналы запуска, чтобы увидеть, есть ли какие-либо ошибки.   -  person Dave Newton    schedule 24.06.2020
comment
Я использую файл struts2-core-2.3.37.jar, поэтому версия 2.3.37. Как называется пакет ng в этой версии?   -  person whatever255    schedule 24.06.2020
comment
Наверное, это; Я не помню - версия 2.3 на данный момент довольно старая, несколько лет. 2.5.x — текущая версия.   -  person Dave Newton    schedule 24.06.2020
comment
Я не очень хорошо знаком со struts, какие усилия потребуются для переноса приложения, использующего struts1, на struts версии 2.5.x? Помимо тегов, функциональность Action очень похожа?   -  person whatever255    schedule 24.06.2020
comment
Даже не удаленно. Если ваше приложение S1 соответствующим образом разделит проблемы, это будет намного проще, но вы все еще смотрите на переписывание внешнего интерфейса (некоторые из которых могут быть частично автоматизированы) и переписывание уровня веб-бизнеса. Вы можете сделать это по частям, но это все еще (примерно) переписывание.   -  person Dave Newton    schedule 24.06.2020
comment
Спасибо, в любом случае. Любые советы о том, что еще перепроверить, почему действие не работает для версии 2.3? Имеет ли значение местоположение struts.xml и т. д.? Я действительно в растерянности.   -  person whatever255    schedule 24.06.2020
comment
Да, проверьте журналы запуска на наличие ошибок. Он принадлежит пути к классам.   -  person Dave Newton    schedule 24.06.2020


Ответы (1)


Две проблемы, в остальном выглядит хорошо.

Первая проблема:

имя действия = класс requestInput = com.class.action.FileAddAction method = выполнить

Вы не можете назвать свой пакет идентификатором class, это недопустимый идентификатор Java.


Вторая проблема:

имя перехватчика-ссылки = форма загрузки

Что такое форма загрузки? Это определенно не предусмотрено Struts 2, см. список.

Назвав пакет по-другому и удалив interceptor-ref uploadForm, я могу нажать кнопку FileAdd.jsp Submit без каких-либо проблем, и он успешно перенаправляет меня на result.jsp. Я использовал v2.3.37.


Примечание.

  • struts.xml должен находиться в папке src/main/resources (struts.xml должен находиться в пути к корневому классу веб-приложения). Проверьте это вне.
  • web.xml должен находиться в папке src/main/webapp/WEB-INF. Проверьте это.
person jumping_monkey    schedule 25.06.2020
comment
Я последовал вашему совету, но у меня все еще возникает та же проблема, когда я нажимаю кнопку отправки: Нет действия, сопоставленного с именем действия requestInput. Вы добавили struts.xml или что-то еще специально в путь к классам? Или, возможно, в какой-то другой части моего кода ..? - person whatever255; 25.06.2020