关于struts2将参数以属性的方式注入到action的疑惑,弄了两天两夜,终于发现问题所在。

最近在弄struts2,用的是struts-2.3.1.2版本,在将参数以属性的方式注入到action的疑惑,碰到个问题。写了一个简单的小程序,在index.jsp页面中... 最近在弄struts2,用的是struts-2.3.1.2版本,在将参数以属性的方式注入到action的疑惑,碰到个问题。写了一个简单的小程序,在index.jsp 页面中
<body>
<a href="success/success!add?username=a&age=1">添加参数</a>
<br />
</body>
在struts.xml配置文件中:
<package name="success" namespace="/success" extends="struts-default">
<global-results>
<result name="error">/error.jsp</result>
</global-results>
<action name="success" class="org.struts2.action.IndexAction">
<result>
/success.jsp
</result>
</action>
</package>
在IndexAction中:
private String username;
private int age;

public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}

public String add(){
System.out.println("username:" + username);
System.out.println("age:" + age);
if(age!=25){
return ERROR;
}
return SUCCESS;
}

问题如下,在index.jsp中,如果传入的参数为:
username=aa&age=11
则程序运行正常,如果参数为
username=a&age=1"
则程序报错:
java.lang.NoSuchMethodException: org.qwj.struts2.action.IndexAction.setAge([Ljava.lang.String;)
在后台输出中输出:
username:
age:0
也就是说struts根本就没有调用我的set方法,把值注入进去。求解释!
请大伙看完题目,
回答一楼:
在index.jsp中,如果传入的参数为:
username=aa&age=11
则程序运行正常,如果参数为
username=a&age=1
则程序报错:
java.lang.NoSuchMethodException: org.qwj.struts2.action.IndexAction.setAge([Ljava.lang.String;)
在后台输出中输出:
username:
age:0
我已经写清楚了传递的参数是什么?

回答二楼:
另外这个web.xml是正常的,不必质疑,因为username=aa&age=11
则程序运行正常

回答三楼:
我英语还是可以的,所以这种简单的报错信息还是能看懂的,我的意思是我在action中定义的就是int类型的age属性,我如果想用struts给它赋值,当然要给它set方法了。

回答四楼,那个引号是我copy的时候不小心把<a>标签的内容给copy了过来的。
展开
 我来答
840129536
2012-05-12 · TA获得超过220个赞
知道小有建树答主
回答量:302
采纳率:100%
帮助的人:223万
展开全部
检查一下web.xml配置文件,看一下有没有加入struts默认的过滤器

<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>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ac8b6ff
2012-05-11 · TA获得超过499个赞
知道小有建树答主
回答量:441
采纳率:0%
帮助的人:385万
展开全部
setAge([Ljava.lang.String;)
没找到String类型的setAge()方法;你第二种传参是这样的href="success/success!add?username=a&age='1'" ?
估计是参数设置的时候多加了引号,变成String类型的
更多追问追答
追问
我没有加单引号,我上面的代码都是直接拷贝的,原先是怎么样现在就是怎么样,至于1后面的双引号是拷贝时不小心多拷贝过来的
追答
本地测试无误,都能输出。
所以无解了.....
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f12c7342e
2012-05-14
知道答主
回答量:46
采纳率:0%
帮助的人:27.9万
展开全部
java.lang.NoSuchMethodException: org.qwj.struts2.action.IndexAction.setAge([Ljava.lang.String;)
报的错误是 没有找到setAge(String s) 类型的方法 因为你定义的是setAge(int age). 所以是传参错了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友df35b2d
2012-05-17 · 超过20用户采纳过TA的回答
知道答主
回答量:85
采纳率:0%
帮助的人:74.4万
展开全部
username=a&age=1" 最后那引号去掉
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式