Squeak.ru - шаблоны программирования

Почему префикс метода не работает в Struts 2.3.32

Я использую Struts 2.3.32, и это код.

methodPrefix.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <s:form action="methodPrefix" theme="simple">
        name: <br/>
        <s:textfield name="name"/>
        <br><br>
        <s:submit value="Create Person"/>
        <s:submit name="method:cancel" value="Cancel"/>
    </s:form>
</body>
</html>

MethodPrefixAction.java

   public class MethodPrefixAction 
    {
        private String name;
        private String message;
        
        public String execute() throws Exception
        {
            message = name + " create";
            return "success";
        }
        public String cancel() throws Exception
        {
            message = "cancel";
            return "success";
        }
        
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getMessage() {
            return message;
        }
        public void setMessage(String message) {
            this.message = message;
        }
    }

struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <constant name="struts.mapper.action.prefix.enabled" value="true" />
     
    <package name="default" extends="struts-default" namespace="">
        <action name="goMethodPrefixPage">
            <result>/chapter4/methodPrefix.jsp</result>
        </action>
        <action name="methodPrefix" class="example.chapter4.MethodPrefixAction">
            <result>/chapter4/methodPrefixResult.jsp</result>
        </action>
    </package>
</struts>

когда я нажимаю кнопку Cancel, он не вызывает метод cancel(), просто вызывает метод execute().

Я не знаю, почему префикс method: не работает.

Я много искал и знаю, что конфигурация префикса method: по умолчанию является ложной в Struts 2.3.32, поэтому я использовал константу..... но это не сработало


  • Попробуйте использовать тег <s:cancel вместо method:cancel. Добавьте cancellable="true" к <action name="methodPrefix" в struts.xml 26.06.2017
  • Это не работает. только что произошла ошибка ‹s:cancel› и может быть отменена с обеих сторон. 26.06.2017

Ответы:


1

Эта постоянная

<constant name="struts.mapper.action.prefix.enabled" value="true" />

работает только для префикса action:, но не для префикса method:. Поэтому вы должны использовать атрибут action для отправки тега.

<s:submit action="cancel" value="Cancel"/>

Примечание. Если у вас есть DMI отключен, префикс action: по-прежнему доступен.

26.06.2017
  • тогда как я могу использовать префикс метода? 27.06.2017
  • для префикса метода вы должны включить DMI, по умолчанию он отключен в целях безопасности, если вы хотите включить его на свой страх и риск, см. это ответь 27.06.2017

  • 2

    Это руководство объясняет это и в этом руководстве показано, как выполнить проверку

    Метод MethodPrefixAction.execute должен возвращать строку success или cancel.

    В struts.xml вы можете перенаправить пользователя на разные страницы на основе возвращаемой строки:

    <action name="methodPrefix" class="example.chapter4.MethodPrefixAction">
                <result name="success">/chapter4/methodPrefixResult.jsp</result>
                <result name="cancel">/chapter4/methodPrefix.jsp</result>
            </action>
    
    26.06.2017
    Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...