为什么方法前缀在Struts 2.3.32中不起作用



我使用支撑杆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:前缀配置默认情况下是第2.3.32条中的false,所以我使用了一个常数.....但是它不起作用

这个常数

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

仅适用于action:前缀,而不是method:前缀。因此,您应该使用action属性提交标签。

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

注意:如果您的DMI关闭了action:前缀。

本教程对此进行了解释,本教程显示了如何进行验证

方法MethodPrefixAction.execute应返回successcancel字符串。

struts.xml中,您可以根据返回字符串将用户重定向到不同页面:

<action name="methodPrefix" class="example.chapter4.MethodPrefixAction">
            <result name="success">/chapter4/methodPrefixResult.jsp</result>
            <result name="cancel">/chapter4/methodPrefix.jsp</result>
        </action>

相关内容

  • 没有找到相关文章

最新更新