项目使用的是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其实也是为了接收前台参数的,只不过这个功能很简单我没有用到它,想不到出了这样的问题,以后我要多多注意了。