SSH整合增删改查求助!删和查功能可以实现,改和增不能 160C

拜托大家帮忙找一下问题,这个困扰我很久了……
以下是配置:
struts.xml
图片说明
baseServiceDao实现
图片说明
图片说明
添加的jsp页面
图片说明
修改的jsp页面
图片说明

roleAction的实现
图片说明
图片说明
图片说明

运行时候访问role_list.action是成功的,就是查的功能是实现的
图片说明
关键问题来了!!进入role_add.action时候出事,我输入要添加的信息,提交按钮显示连接是不带.action的??可是这个里面应该是不用带后缀.action的。
图片说明
edit也是这个问题
图片说明
图片说明
最后如果我把改成再去访问,就是
图片说明

我研究了很久,各种方法尝试过了,百度也翻了N页,真的没找到相关的解答,因为我查和删的action都能成功的,就是add和update总是找不到result
后缀带上action这个时候提示的错误如下:
19:39:52.159 [http-nio-8080-exec-6] ERROR org.apache.struts2.dispatcher.Dispatcher - Could not find action or result: /SSHTEST/role_edit.action
com.opensymphony.xwork2.config.ConfigurationException: There is no Action mapped for namespace [/] and action name [role_edit] associated with context path [/SSHTEST].
at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:195) ~[struts2-core-2.5.14.1.jar:2.5.14.1]
at org.apache.struts2.factory.StrutsActionProxy.prepare(StrutsActionProxy.java:57) ~[struts2-core-2.5.14.1.jar:2.5.14.1]
at org.apache.struts2.factory.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:32) ~[struts2-core-2.5.14.1.jar:2.5.14.1]
at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:60) ~[struts2-core-2.5.14.1.jar:2.5.14.1]
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:564) [struts2-core-2.5.14.1.jar:2.5.14.1]
at org.apache.struts2.dispatcher.ExecuteOperations.executeAction(ExecuteOperations.java:79) [struts2-core-2.5.14.1.jar:2.5.14.1]
at org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:141) [struts2-core-2.5.14.1.jar:2.5.14.1]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [catalina.jar:8.5.15]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:8.5.15]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) [catalina.jar:8.5.15]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [catalina.jar:8.5.15]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478) [catalina.jar:8.5.15]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) [catalina.jar:8.5.15]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80) [catalina.jar:8.5.15]
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624) [catalina.jar:8.5.15]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [catalina.jar:8.5.15]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) [catalina.jar:8.5.15]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799) [tomcat-coyote.jar:8.5.15]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-coyote.jar:8.5.15]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861) [tomcat-coyote.jar:8.5.15]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455) [tomcat-coyote.jar:8.5.15]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-coyote.jar:8.5.15]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_131]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_131]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-util.jar:8.5.15]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_131]

我也不知道是JAR包有什么问题吗?平台是Eclipse,JDK是1.8的。我是新手,有可能JAR包导多了……JAR包如下:
图片说明
图片说明

我是自学的,刚开始做SSH项目,周围没有人可以问,之前bug都是自己百度解决了……真心求助,写帖子排版也花了好久的,有好心人帮忙看一下不。卡在这里我强迫症,没有办法跳过,后面的东西做不下去。。
另外,第一次发帖,不知道还需要提供什么东西不?有没有人看懂我错在哪里了?

不知道有没有人看?
我研究到现在,发现了很诡异的地方……现在增的功能也能实现了,我把roleAction类里的add方法名字换成save,然后jsp里那个也换了jsp的form里action="save",注意,这里没有后缀【我为什么强调后缀是因为这个很诡异的问题最直接的体现在于后缀】,之前写法是action="add",也没加后缀,访问时点击链接显示http://localhost:8080/SSHTEST/role_add【注意,此处后缀没带.action】,我要强调的是我设置了extension就是action,所以不带后缀时肯定是找不到显示404的。但是我的list方法和delete方法,同样的写法run的时候链接的地址都自己带上了.action,就add和edit不行。我甚至复制粘贴过去了,重写过了,都没用,就这2个方法的连接死活run的时候不带后缀。我无意中把add名字换成了save,也没做什么,突然就成功了……问题是add不是什么struts2的关键字,我想不通,给edit方法改了个名字,怎么改也还是连接中不出现后缀。我就再去折腾了一遍save方法,我又什么都不动,重新把save改成了add,果然,又不能新增了。然而我再改回save,此时竟然失效了,又显示连接不带后缀了。我只好ctrl+z恢复一下,然后又可以用了!!!不是输入法问题,我一直用的英文的输入法。我现在就觉得Struts2间歇性的抽风了!这个莫名其妙的问题让我今晚上又废在这里了。
来个有经验的大佬解答一下好不好?Struts2是2.5.14的。我真心觉得不是我代码问题,我都手动重写了两遍……复制黏贴改过两遍。都没用的。另外关于后缀的问题,我也试过注释那句extension只能是action。但是同样做到edit的时候报错
01:30:08.669 [http-nio-8080-exec-10] ERROR org.apache.struts2.dispatcher.Dispatcher - Could not find action or result: /SSHTEST/role_edit
com.opensymphony.xwork2.config.ConfigurationException: There is no Action mapped for namespace [/] and action name [role_edit] associated with context path [/SSHTEST].

5个回答

感谢大家的回复!一开始我真的挺着急的,平时上CSDN都只是看别人的文章查查东西,一点C币都没有了……全用完了。。。这次一着急提问还特地花钱去充值了。。后来第二天周日我研究了一个下午,找出来问题所在了,感觉自己花钱充了个智商吧。。
这个主要原因在于struts.xml那里。

<action name="role_*" class="roleAction" method="{1}">
            <result name="list">/WEB-INF/jsp/roleAction/list.jsp</result>
            <result name="addUI">/WEB-INF/jsp/roleAction/saveUI.jsp</result>
            <result name="editUI">/WEB-INF/jsp/roleAction/saveUI.jsp</result>
            <result name="toList" type="redirectAction">role_list</result>
            <allowed-methods>addUI,list,editUI,edit,add</allowed-methods>
        </action> 

就是这段话。一开始的allowed-methods中我就写了addUI,list,editUI方法(PS:名称若与之前不匹配,是我后面找到错误后修改过了),是我太傻了,已经知道struts2的通配符有bug,必须加上allow-methods这句话了,竟然写的时候看着上面的result写的,toList是重定向我就没在意。add和edit方法的return都是"toList",所以这2个方法都找不到result了。不过那天晚上为什么我改个方法名从add改成save,一下子成功了添加功能,我只能理解为struts2被我改来改去玩抽风了……
最后谢谢所有回答我问题的朋友们的帮助!不好意思没及时回复你们,因为那天解决后就接着做下去了,前两天家里出了点事情,我都没时间开电脑了,今天特地上来看一下会不会有人回答出了最后答案。虽然没有用上,但是也非常感谢。之前有问题一直都是自己翻百度找原因的,第一次发现有人能回答我问题挺开心的。
总结:虽然作为一个萌新,这种问题都困扰了我好几天,但是最后自己研究出来好开心的!

1.你的新增和修改页面表单跳转改为 action="role_add.action" action="role_edit.action"
2.然后在 struts.xml 添加 role_add 和 role_edit的跳转页面配置
就ok了 你写的有问题 出现莫名 更改后可以清理下浏览器的缓存防止出现你说的莫名奇妙的问题

llccyy123
llccyy123 谢谢解答,不过这个action里面写"role_add.action"我早就试过了,也没用的,虽然这样写访问路径会显示我想要的那个结果,但是仍然是找不到result。而且struts明确提示说""里的不带后缀.action。
2 年多之前 回复

我认为错误是模型的属性和表单中的name不一样,baseServiceDao中sava方法的参数(T entity)应该与roleAction中的roleService.sava(role)的role一致。不过pojo类没有贴出来,web.xml也可以贴出来。

llccyy123
llccyy123 谢谢解答,不是属性问题,我百度找404错误的时候看到过很多是因为属性不匹配出错的,不过name是String类型的,我这次不是因为这个问题出错的。我已找到原因,见我下面的回复。若碰上可参考。
2 年多之前 回复

删和改的区别不大把,应该不会出现这样的问题把,一般的是sql语句的问题,建立的映射问题,字段值不对应的把

lixiaozhen007
lixiaozhen007
2 年多之前 回复
llccyy123
llccyy123 谢谢解答,对的,第一时间我也是考虑过SQL语句是否有问题,但是增删改查是最最基本的那种,直接调用hibernate封装后的那几个方法,我没有什么JDBC写或者hibernate自己手写HQL语句。我已找到原因,感兴趣可以看我下方的回复,以后若碰上可以参考……
2 年多之前 回复

role_add 的映射路径没有配置正确

llccyy123
llccyy123 谢谢回复,那个错误提示是表达了这个意思,但是路径具体哪里不对头我找了很久很久……是我太无知,我后来自己研究出来了,见我下面的回复,感兴趣可以看下,以后碰到了相同情况也许能有帮助
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问