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呢?求解脱
<?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啊的主要内容,如果未能解决你的问题,请参考以下文章