报错信息如下:
Struts Problem Report
Struts has detected an unhandled exception:
Messages: |
|
Stack traces
This method: edit for action product is not allowed! - [unknown location]
com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:200) org.apache.struts2.factory.StrutsActionProxy.prepare(StrutsActionProxy.java:63) org.apache.struts2.factory.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:37) com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58) org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:546) org.apache.struts2.dispatcher.ExecuteOperations.executeAction(ExecuteOperations.java:81) org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:113) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099) org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.lang.Thread.run(Thread.java:745)
jsp源代码:
<body>
<table>
<tr>
<th>商品id</th>
<th>商品名称</th>
<th>数量</th>
<th colspan="2">操作</th>
</tr>
<tr>
<td>1001</td>
<td>手机</td>
<td>128</td>
<td><a href="product!edit.action?productId=1001">编辑</a></td>
<td><a href="product!del.action?productId=1001">删除</a></td>
</tr>
<tr>
<td>1002</td>
<td>相机</td>
<td>120</td>
<td><a href="product!edit.action?productId=1002">编辑</a></td>
<td><a href="product!del.action?productId=1002">删除</a></td>
</tr>
</table>
</body>
java源代码
public class ProductAction extends ActionSupport {
private int productId;
/**
* @return the productId
*/
public int getProductId() {
return productId;
}
/**
* @param productId
* the productId to set
*/
public void setProductId(int productId) {
this.productId = productId;
}
/**
* 编辑商品
*/
public String edit() {
System.out.println("编辑商品" + this.productId);
return "edit";
}
/**
* 删除商品
*/
public String del() {
System.out.println("删除商品" + this.productId);
return "del";
}
}
java源代码struts.xml
<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="product" class="action.ProductAction">
<result name="edit">/edit.jsp</result>
<result name="del">/del.jsp</result>
</action>
</package>
</struts>
解决方案:修改struts.xml,添加被allowed的方法
<?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.devMode" value="true" />
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="product" class="action.ProductAction">
<result name="edit">/edit.jsp</result>
<result name="del">/del.jsp</result>
<p style="margin-top: 0px; margin-bottom: 0px; font-size: 11px; line-height: normal; font-family: Monaco; color: rgb(79, 118, 203);"><span style="white-space:pre"> </span> <!-- 添加被允许的两个方法 --></p><span style="color:#ff0000;"><span style="white-space:pre"> </span><allowed-methods>del,edit</allowed-methods></span>
</action>
</package>
</struts>
注意:若出现下面这个错误
Struts Problem Report
Struts has detected an unhandled exception:
Messages: |
|
Stacktraces
There is no Action mapped for namespace [/] and action name [product!del] associated with context path [/Chapter03]. - [unknown location]
应修改struts.xml文件:
<span style="color:#3933ff;"><struts>
<constant name="struts.devMode" value="true" />
</span><span style="color:#ff0000;"><constant name="struts.enable.DynamicMethodInvocation" value="true" /></span>
<span style="color:#ff0000;"></span><pre name="code" class="html" style="font-size: 11px;"><span style="color:#3933ff;">……</span>