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

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:

目测,应该是拦截器少引用一个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的默认拦截器,再调用你自己定义的拦截器。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-16
有没有在index.jsp导入Strtus标签库啊?Action这些的配置和编写有没有错啊!能不能把代码全部贴出来追问

导入了。贴出来了,麻烦帮忙看下

第2个回答  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

相似回答