在学习java中Struts2框架,使用Action类进测试时,出现
No result defined for action actions.***Action and result success
下面是我Struts2工程下的测试代码:
src下actions包:ParamAction.java
package actions;
public class ParamAction {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String execute() {
System.out.println("你的名字是:" + name);
return "success" ;
}
}
下面是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>
<package name="struts" extends="struts-default" >
<action name="param" class="actions.ParamAction">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>显示name属性</title>
</head>
<body>
<h1>
name属性值:
<s:property value="name" />
</h1>
</body>
</html>
启动tomcat后,
当我在浏览器中输入:http://localhost:8080/param.action?name=xxx
应该会跳转到success.jsp中的页面。
一般是不会出问题的,但是会出现下列错误:
多方查找资料发现原因:
由Struts2-Convention-Plugin.jar包引起。
这个包是实现Struts零配置功能的。他会扫描你的所有action、actions、struts 、struts包下含有execute方法的类。并根据其类名建立mmm.action映射。这时候当你访问mmm.action时系统会首先调用零配置方法配置的action,而这时候你又没有使用注解配置其result。当然就报找不到no result啦。
**解决办法:**假如你的类名为MMMAction,在配置XML的时候action name,就不要设置为MMM,改为MMM_test,或者其他的例如:
这样Struts2-Convention-Plugin.jar就不会对它产生影响了。
修改之后效果:
完美解决!!