为什么方法前缀在 Struts 2.3.32 中不起作用
Why method prefix not working in 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:
前缀不起作用。
查了很多,知道Struts2.3.32默认method:
前缀配置是false的,所以用了常量.....但是没有用
This tutorial explains it and this tutorial 显示如何进行验证
方法MethodPrefixAction.execute
应该returnsuccess
或cancel
字符串。
在 struts.xml
中,您可以根据 return 字符串将用户重定向到不同的页面:
<action name="methodPrefix" class="example.chapter4.MethodPrefixAction">
<result name="success">/chapter4/methodPrefixResult.jsp</result>
<result name="cancel">/chapter4/methodPrefix.jsp</result>
</action>
这个常量
<constant name="struts.mapper.action.prefix.enabled" value="true" />
仅适用于 action:
前缀,不适用于 method:
前缀。所以你应该使用 action
属性来提交标签。
<s:submit action="cancel" value="Cancel"/>
注意: 如果您 DMI 关闭,action:
前缀仍然可用。
我使用 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:
前缀不起作用。
查了很多,知道Struts2.3.32默认method:
前缀配置是false的,所以用了常量.....但是没有用
This tutorial explains it and this tutorial 显示如何进行验证
方法MethodPrefixAction.execute
应该returnsuccess
或cancel
字符串。
在 struts.xml
中,您可以根据 return 字符串将用户重定向到不同的页面:
<action name="methodPrefix" class="example.chapter4.MethodPrefixAction">
<result name="success">/chapter4/methodPrefixResult.jsp</result>
<result name="cancel">/chapter4/methodPrefix.jsp</result>
</action>
这个常量
<constant name="struts.mapper.action.prefix.enabled" value="true" />
仅适用于 action:
前缀,不适用于 method:
前缀。所以你应该使用 action
属性来提交标签。
<s:submit action="cancel" value="Cancel"/>
注意: 如果您 DMI 关闭,action:
前缀仍然可用。