struts2使用注解时报错There is no Action mapped for namespace /WEB-INF/content and action name listProduct

在做SSH框架整合项目时,传统模式(不使用注解)下已成功运行,后改用注解方式进行尝试,包括使用spring注解、struts注解。完成注解配置后,初始页面显示正常,但部分功能模块不正常:
1、以下为显示正常的初始页面
在这里插入图片描述
2、点击delete删除一条记录,随即报错:

HTTP Status 404 - There is no Action mapped for namespace /WEB-INF/content and action name listProduct.

在这里插入图片描述
3、原因分析:
初始页面正常,表明初始页面的action是找到的,那么说明struts注解配置整体无误,否则就会连初始页面也找不到。与此同时,经观察数据库,发现实际上delete()方法已经执行,记录已被删除,那么就只是找不到返回地址。初步定为在功能模块action的配置上。
下面对正常与不正常的两个action进行比较:
在这里插入图片描述
经比较,二者的区别在于返回结果:listProduct的返回结果是为jsp页面,即为转发(dispatcher,默认);而deleteProduct的返回结果是为另一个action,即为重定向。那么问题可能就在于此,系统默认类型为转发,需要为deleteProduct的返回添加type属性,指明返回结果为重定向:
在这里插入图片描述
4、重启运行:
在这里插入图片描述
delete再次执行成功。

5、说明
struts2 跳转类型 result type=chain、dispatcher、redirect(redirect-action)
chain 用于把相关的几个action连接起来,共同完成一个功能。
dispatcher 为跳转/转发类型(默认),用于页面转发,用于返回一个视图资源(如:jsp),location只能是页面,不能是另一个action(可用type="chain"解决)。页面跳转过程一直是同一个线程,Action中的数据一直保存在。
redirect 为重定向,用于重定向到一个页面,另一个action或一个网址。

注:redirect类型是把一个http返回码(SUCCESS)以及返回的页面位置重新发给web服务器,后由web服务器重新产生一个新的HTTP请求,就会产生一个新的线程,保存在原来Action执行线程中的数据就无法访问。所以,result需要包含Action的数据,那么就不能使用redirect类型,因为新的HTTP请求是在Servlet容器的新线程中处理,ActionContext中的所有状态都不会存在。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值