可能有的小伙伴们就遇到了这种问题, 表单提交到action对象中, 进行注入时, 发现只有一个属性有值, 有细心的小伙伴们就发现了每一个表单属性(也就是input标签,要注入到哪个bean中)就会重新创建一个对象, 导致最后一个bean里面只有最后一个表单属性传过来的值, 这个问题我一直以为是框架问题, 后面发现是有个方法没写 导致出现这种问题.代码如下:
jsp中有一个表单: 提交到action的login方法中;
<form action="user!login">
<table width="100%">
<tr>
<th>
用户名
</th>
<td>
<input size="10" maxlength="20" name="user.usrName" />
</td>
</tr>
<tr>
<th>
密码
</th>
<td>
<input type="password" size="10" maxlength="20" name="user.usrPassword" />
</td>
</tr>
<tr>
<td>
</td>
<td>
<input type="submit"/>
</td>
</tr>
</table>
</form>
action中login方法如下:
private SysUser user;
public String login(){
System.out.println(user);
}
public void setUser(SysUser user) {
this.user = user;
}
有发现什么吗? 有的小伙伴跟这个action是不是如出一辙呢, 请继续往下看
action.xml配置:
<package name="p1" namespace="/" extends="struts-default">
//这个ua引用的是spring主配置文件(applicationContext.xml)中的bean对象,指向action类
<action name="user" class="ua">
<result>/index.jsp</result>
</action>
</package>
然后在jsp页面登录运行, 就出现了bean对象只有一个值,其余属性值都为null, 这是什么原因呢? 其实只需要加个方法就能完美解决.
只需要在action中加个get方法就可以完美解决
private SysUser user;
public String login(){
System.out.println(user);
}
public void setUser(SysUser user) {
this.user = user;
}
public SysUser getUser() {
return user;
}
登录运行 打印出:
SysUser [usrFlag=null, usrId=null, usrName=fdsa, usrPassword=vcxz, usrRoleId=null]
因为只提交了用户名跟密码所有只有这两个有值