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: 展开
<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: 展开
3个回答
展开全部
目测,应该是拦截器少引用一个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的默认拦截器,再调用你自己定义的拦截器。
展开全部
有没有在index.jsp导入Strtus标签库啊?Action这些的配置和编写有没有错啊!能不能把代码全部贴出来
追问
导入了。贴出来了,麻烦帮忙看下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-07-16
展开全部
不要
setUsername(username);
setPassword(password);
setUsername(String username);
setPassword(String password);
是Struts自动调用的
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询