struts2的action获取不了前台表单的值

index.jsp:<s:formname='form1'id='form1'method='get'action='testAction'><s:textfieldna... index.jsp:

<s:form name='form1' id='form1' method='get' action='testAction'>
<s:textfield name="username" label="用户名"></s:textfield>
<s:password name="password" label="密 码"></s:password>
<s:submit value="提交"></s:submit>
</s:form>
输入用户名和密码,能跳转到testAction,执行execute方法。
testAction对应的类是MyAction,主要代码如下:

private String username;
private String password;

public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String execute(){

setUsername(username);
setPassword(password);
System.out.println("username是"+username);
System.out.println("password是"+password);
return SUCCESS;
}执行execute方法,打印username和password都是null。
有人说表单里的name应该是类名.username,我改成MyAction.username 还是不行,username还是null。
action里不是有get和set方法,前台传过来的值就能给后台action对应的属性赋值么,怎么是null了。纠结了一天,不懂!求高手回答!
struts.xml:
struts-test.xml:

MyAction.java:
展开
 我来答
谭奇源
2013-07-16 · TA获得超过166个赞
知道小有建树答主
回答量:179
采纳率:50%
帮助的人:69.1万
展开全部

目测,应该是拦截器少引用一个defaultStack了。

<interceptor-stack name="myInterceptorStack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="myInterceptor"></interceptor-ref>
<interceptor-ref name="loginInterceptor"></interceptor-ref>
</interceptor-stack>

这个defaultStack是不能少的,获取表单请求值填充到action的字段,必须要先经过strtus2的defaultStack。

追问
果然是的,大神啊!
ps:为什么要先引strtus2的默认拦截器栈才能将表单中的值填充到action的属性啊?求指教
追答
因为struts2里面大部分功能也同样是用拦截器做的,你可以在struts的core里找到并打开struts-default.xml文件。拦截请求参数,并赋值给action里的属性,也是一个拦截器在负责,并且写在defaultStack里面。

所以,你代码里用到myInterceptorStack拦截器组了,就表示不再使用defaultStack,默认是defaultStack。如果没有了那个拦截请求参数的拦截器,请求的值当然不能赋给action的setter了。

把defaultStack写在最前面,就表示先调用struts2的默认拦截器,再调用你自己定义的拦截器。
小伟程序设计
2013-07-16 · TA获得超过180个赞
知道小有建树答主
回答量:295
采纳率:0%
帮助的人:158万
展开全部
有没有在index.jsp导入Strtus标签库啊?Action这些的配置和编写有没有错啊!能不能把代码全部贴出来
追问
导入了。贴出来了,麻烦帮忙看下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-07-16
展开全部
不要

setUsername(username);
setPassword(password);

setUsername(String username);
setPassword(String password);
是Struts自动调用的
追问
去了那两段,还是不行,null。
追答
public String execute() throws Exception {

可以参考这个完整的例子
http://mirror.bjtu.edu.cn/apache//struts/examples/struts-2.3.15.1-apps.zip
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式