struts2为啥找不到action啊

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2为啥找不到action啊相关的知识,希望对你有一定的参考价值。

先简单介绍一下情况,一个简单的输入用户名和密码的界面,输入后会查询后台数据库中用户名和密码是不是都为admin,是则返回一个界面,不是则返回原登陆界面,下面是代码:(只写重要部分了)
登陆界面:
<form action="login.action" method="post">
<table align="center" border=1>
“具体的界面布局就不写了”
</table>
</form>

strut.xml文件中加入了映射 <include file="../config/user/struts_user.xml" />
而struts_user.xml文件代码为:

<package name="user" extends="common" >
<action name="login" class="com.neusoft.um.user.action.UserAction" method="login">
<result name="input">/UM/login.jsp</result>
<result name="success">/UM/user/userManage.jsp</result>
</action>
</package>

在UserAction中就执行相应的方法了,
可是我在点提交 按钮的时候 给我显示的页面时404 提示的错误信息是

There is no Action mapped for namespace / and action name login.

我不明白 自己哪块 连错了啊,为什么它就是找不到action呢?求解脱

参考技术A 以下是基本的代码格式!

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" namespace="/" extends="struts-default"> <action name="login" class="com.gsww.kingreturns.struts2.excise.LoginAction" method="execute"> <result name="success">/welcome.jsp</result> <result name="login">/login.jsp</result> </action> </package>

</struts>
主要属性说明:package-name:用于区别不同的package;必须是唯一的、可用的变量名;用于其它package来继承;

package--namespace:用于减少重复代码(和struts1比较);是调用action时输入路径的组成部分;

package--extends:用于继承其它package以使用里面的过滤器等东东;

action--name:用于在一个package里区别不同的action;必须是唯一的、可用的变量名;是调用action时输入路径的组成部分;

action--class:action所在的路径(包名+类名);

       action--method:action所调用的方法名;

特别注意。在写result视图的时候,有这样两种写法:/WEB-INF/Hello.jsp和WEB-INF/Hello.jsp
参考技术B <package>标签里面,extends属性的值是common?这个common是什么?
extends属性的值在struts的tld文件里面都规定好了,必须写成struts-default。二楼是正确的。
参考技术C 配置文件中package写错了,extends应该等于“Struts-default” 而不是你自己写的common 参考技术D class路径没错?追问

没错啊,我检查了很多回了

struts中找不到对应的action 方法

 报的错是这个:

  

type Exception report

message cn.itcast.b_form.UserAction.register()

description The server encountered an internal error that prevented it from fulfilling this request.

exception

java.lang.NoSuchMethodException: cn.itcast.b_form.UserAction.register()
	java.lang.Class.getMethod(Class.java:1670)
	org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.getActionMethod(AnnotationValidationInterceptor.java:75)
	org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:47)
项目结构:

技术分享

 



情况是:现在是两个包里面都有UserAction 但是一个里面有register方法一个没有。不知道为什么不找真正的action却找到另一个action里面去了,所以报错,原因再找找看

  找到原因,应该是两个包的namespace没有作区分,可以在namespace 添加不同的值试试。 还是有点不解,在总配置struts.xml里面我的正确的 action配置是放在前面的,为啥它偏偏找到后面的
没有对应方法的action里面呢?






以上是关于struts2为啥找不到action啊的主要内容,如果未能解决你的问题,请参考以下文章

struts2出现找不到映射错误

Struts2 的action里的方法不能带有参数

Struts2 的action里的方法不能带有参数

Struts2 为啥我总是出现404错误,找了半天,路径和配置写的都正确,但总显示不出来我想要的result

struts2上传文件的action怎么写

struts2.5.2 通配符问题_亲测有用