表单参数和action中定义的对象同名导致strutr2的action路径错误

本文讨论了一个AJAX提交导致的后台配置问题,通过修改参数名称解决了AJAX请求与后台Action方法参数名冲突的问题。文章详细阐述了问题定位、排查过程及最终解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目使用的是ssh,struts是用的2。

今天做了一个很简单的意见反馈功能,就是一个提交一个textarea的内容到后台,问题来了,点击提交后后台没有反应,第一反应是action的配置可能弄错了,反复检查配置文件等等,都是正确的,于是我将请求地址直接粘贴在浏览器里访问:

http://127.0.0.1:8080/myStore/es_baseinfo_opinion/saveOpinionAction.action

 返回的是正确的json数据:

{"callbackMessage":{"messageID":"0","messageInfo":""}}

 看来可以确定配置是没有问题的,我又回到功能页面点击提交按钮,问题依旧,此时我再按上面的方式在浏览器里访问该地址,报错了:

java.lang.RuntimeException: Invalid action class configuration that references an unknown class named [opinionAction]

 顿时觉得非常奇怪,刚开始在浏览器里访问不是正常的吗,怎么回到功能提交失败后,浏览器里直接访问也报错了呢?反复检查、替换代码后,发现页面提交表单的地方:

$.ajax({
    type: "POST",
    url: "${pageContext.request.contextPath}/es_baseinfo_opinion/saveOpinionAction.action",
    data: {"operation": "add",
               "opinion": $.trim($("textarea[name='opinion']").val())},
    ...
    后面的代码省略

 这里有一个参数是opinion,就是用户录入的意见内容,而我的action里有一个opinion对象:

@Controller("opinionAction")
public class OpinionAction extends ActionSupport implements RequestAware {
    private int total;
    private Opinion opinion;
    ...
    后面的代码省略

 现在我想应该是前台的参数opinion和后台的这个Opinion对象重名导致这个问题的出现,于是我将前台ajax提交的那段代码里的opinion改成了content,再点击功能里的提交,问题解决。

 

action里的这个Opinion其实也是为了接收前台参数的,只不过这个功能很简单我没有用到它,想不到出了这样的问题,以后我要多多注意了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值