读书人

SSH有关问题There is no Action 地图

发布时间: 2012-12-16 12:02:32 作者: rapoo

SSH问题,There is no Action mapped for action name null.
index.jsp页面如下:


<div align="center" style="border-style: groove">
<form action="login" id="login" method="post" onsubmit="return isNull();">
<strong>姓    名:</strong>
<input type="text" name="user.name" class="tablestyle" id="user.name" style="width:200px"><br>
<strong>密    码:</strong>
<input type="password" name="user.password" class="tablestyle" id="user.password" style="width:200px"><br>
<input type="submit", name ="login" value="登录" class="onmouseout"
onmouseover="this.className='onmouseover'"
onmouseout="this.className='onmouseout'">

<a href="<%=path %>">找回密码</a>
<a href="<%=path %>/reg.jsp">注册</a>
</form>
</div>

web.xml如下:

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<servlet>
<servlet-name>UpLoadPic</servlet-name>
<servlet-class>com.poscard.Util.UpLoadPic</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UpLoadPic</servlet-name>
<url-pattern>/UpLoadPic1</url-pattern>
</servlet-mapping>

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>




<!-- spring -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:/beans.xml
</param-value>
</context-param>


现在的问题是,当我点击注册超链接时,会跳转到reg.jsp。但是后台报错:

[http-8099-1] WARN org.apache.struts2.dispatcher.Dispatcher - Could not find action or result
There is no Action mapped for action name null. - [unknown location]
at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:177)
at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61)
at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:47)


at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:458)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:662)


[最优解释]
那就可能是你的reg.jsp里面发出了一个null请求
[其他解释]
你本身就在当前路径下的,所以这个<%=path %>不需要加
[其他解释]
各位大大怎么还不出现?
[其他解释]
查看一下你的struts.xml配置的action跳转路径对否?
[其他解释]
我这只是个超链接啊,struts里面写的是按钮的跳转页面啊
[其他解释]
<a href="<%=path %>/reg.jsp">注册</a>
</form>
链接放在form外面试试
[其他解释]
你这个注册按钮只是个跳转链接,可以不用包在form中的
[其他解释]
不放在form里也是报一样的错误。。。。
[其他解释]
你在浏览器里直接访问reg.jsp,看会不会报那个错误
[其他解释]
用火狐浏览器看点击那个链接后发出了几个请求
[其他解释]
引用:
你在浏览器里直接访问reg.jsp,看会不会报那个错误

直接访问也报错。。。
[其他解释]
两个解决办法:
1. 你在后台加个方法,跳转到注册的页面方法,然后再struts.xml配置一下你的页面的路径就好了,这样你的路径问题就统一了。(这个方法对你初始化一下页面信息比较有用,比如你需要一个查出来的列表展示在页面什么的。)
2.直接作为一个单纯的链接放在页面上。这个对路径的要求比较高了。一定要保证路径的正确性。
<%=path %>/reg.jsp这个就是你原始的跳转的路径?
<%=path %>这个是指的完全的路径是什么呢。

[其他解释]
对于楼上的第一种方法我理解,也这样做过。
第二种方法的path就是在JSP页面的开头写的
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
[其他解释]
吧struts.xml里面的东西复制出来看看
------其他解决方案--------------------



<struts>
<!-- 查询用户部门 -->
<package name="querydept" namespace="" extends="struts-default">
<action name="querydept" class="QueryDeptAction" method="queryDept">
<result>/depttree.jsp</result>
</action>
</package>


<package name="upload" namespace="" extends="struts-default">
<action name="upload" class="com.poscard.action.UploadAction">
<result>reg.jsp</result>
</action>
</package>

<package name="login" namespace="" extends="struts-default" >
<action name="login" class="LoginAction">
<result>/main.jsp</result>
<result name="error">/index.jsp</result>
</action>
</package>
<!-- 跳转到查询页面 -->
<package name="querypage" extends="struts-default">
<action name="querypage" class="QueryAction" method="queryPage">
<result>/query.jsp</result>
<result name="error">/index.jsp</result>
</action>

</package>
<!-- 跳转到新增界面 -->
<package name="add" extends="struts-default">
<action name="add" class="AddAction" method="AddPage" >
<result>/add.jsp</result>
<result name="error">/index.jsp</result>
</action>
</package>
<!-- 查询数据 -->
<package name="querydata" namespace="" extends="struts-default" >

<action name="querydata" class="QueryAction" method="queryData">
<result>/querydatasuccess.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>

<package name="update" namespace="" extends="struts-default">
<action name="query" class="UpdateAction" method="queryAccount">
<result name="update">/update.jsp</result>
<result name="error">/error.jsp</result>
</action>

<action name="update" class="UpdateAction" method="update">
<result type="redirect">


/queryall!queryandpage.action
</result>
<result name="error">
/updateerror.jsp
</result>
</action>
<!-- 根据ACCID查询 -->
<action name="updateByaccid" class="UpdateAction" method="updateByaccid">
<result name="success">/updatesuccess.jsp</result>
</action>
</package>

<!-- 查询全部数据 -->
<package name="queryall" namespace="" extends="struts-default" >
<action name="queryall" class="QueryAllAction" method="queryandpage">
<result>/pagebean.jsp</result>
<result name="error">/index.jsp</result>
</action>
</package>


<package name="addAccoInfo" namespace="" extends="struts-default">
<action name="addAccoInfo" class="AddAction" method="Add">
<result>
/addsuccess.jsp
</result>
<result name="error">
/adderror.jsp
</result>
</action>
</package>

<package name="delete" namespace="" extends="struts-default">
<action name="deleteacco" class="DeleteAction" method="delete">
<result name="success" type="redirect">
/queryall!queryandpage.action
</result>
</action>

</package>
</struts>


[其他解释]
确实如楼上所说,我的一个img标签发出请求,谢谢解答。结贴了。
[其他解释]
你每个请求对应一个package,你要让请求知道你是请求的哪个package中的action吧
你试试<form action="login/login" id="login" method="post" onsubmit="return isNull();">

读书人网 >Java Web开发

热点推荐