关于在Struts2的Action中使用domain模型接收参数的问题
最近在搭建一个最新的ssh2框架,今天在调试的时候,发现了一个以前一直没有注意过的问题,我在Action中使用域模型的方式去接收jsp画面中的参数的时候,发现参数总是接收不完,头一次遇到这种问题,现在把解决办法写下来
Jsp中的代码如下:
<form action="TestAction" method="post">
用户名:<input type="text" name="user.userName"><br/>
密 码:<input type="text" name="user.userPwd"><br/>
<input type="submit" value="提交">
</form>
然后我在Action中定义一个user属性,user中包含了userName和userPwd属性,代码如下:
/**
* 定义UserInfo的域模型,用于接收Form表单中的参数
*/
private UserInfo user;
public void setUser(UserInfo user) {
this.user = user;
}
因为我在Action只写了setUser方法,没有写相应的getUser方法,所以在接收参数的时候就出现了如下问题

在调试过程中发现,user域模型只接收到了一个参数,userName的却为空了

使用了Struts2框架那么久了,还是头一次遇到这个问题,百思不得其解。后来上网查了原因发现,原来是少了对应的getUser方法才导致出现了这个问题,因为struts2对这种混合类型的注入不是一次性全部注入其属性,而是每注入一次下一次就在前台获取obj然后再注入。我们编程时习惯getter/setter 都写,因此很少碰到这个问题。
在Action中加上对应的getUser方法,代码如下:
private UserInfo user;
public UserInfo getUser() {
3 return user;
4 }
public void setUser(UserInfo user) {
this.user = user;
}
再次进行接收参数测试

这次就可以把JSP中填写的用户名和密码都获取下来了,如下图所示:

总结:在Struts2中使用domain模型接收参数时,一定要写上该模型对应的get和set方法,否则就会出现参数接收不完的情况。
在Action中使用域模型接收参数的正确写法范例:
/**
* 定义UserInfo的域模型,用于接收Form表单中的参数
*/
private UserInfo user;
/**
* 对应的get方法
*/
public UserInfo getUser() {
return user;
}
/**
* 对应的set方法
*/
public void setUser(UserInfo user) {
this.user = user;
}
关于在Struts2的Action中使用domain模型接收参数的问题的更多相关文章
- 在struts2的action中操作域对象(request、session)
在struts2的Action中,操作域对象一共有三种方式: 1.ActionContext(与servelt API无关联): //相当于request ActionContext.getConte ...
- JavaWeb_(Struts2框架)Action中struts-default下result的各种转发类型
此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...
- 9.Struts2在Action中获取request-session-application对象
为避免与Servlet API耦合在一起,方便Action类做单元测试. Struts2对HttpServletRequest.HttpSession.ServletContext进行了封装,构造了三 ...
- struts2的action中获得request response session 对象
在struts2中有两种方式可以得到这些对象 1.非IoC方式 要获得上述对象,关键Struts 2中com.opensymphony.xwork2.ActionContext类.我们可以通过它的静态 ...
- struts2对action中的方法进行输入校验---xml配置方式(3)
上面两篇文章已经介绍了通过编码java代码的方式实现action方法校验,这里我们介绍第二种方式:xml配置文件 首先我们来看一个样例: ValidateAction.java: package co ...
- struts2对action中的方法进行输入校验(2)
struts2输入校验流程: 1.类型转换器对请求參数运行类型转换,并把转换后的值赋给aciton中的属性 2.假设在运行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext, ...
- 理解Struts2的Action中的setter方法是怎么工作的
接触过webwork和Struts2的同行都应该知道, 提交表单的时候,只要Action中的属性有setter 方法,这些表单数据就可以正确赋值到Action中属性里:另外对于Spring配置文件中声 ...
- 在Struts2的Action中获得request response session几种方法
转载自~ 在Struts2中,从Action中取得request,session的对象进行应用是开发中的必需步骤,那么如何从Action中取得这些对象呢?Struts2为我们提供了四种方式.分别为se ...
- struts2的action中@Autowired注入为null的解决方案
今天遇到类似问题,记录下来以便以后查阅: @Aspect作用于action,致使action中的@Autowired注入为null的解决方案,以下三种任选一种: 1.去掉@Autowired,改用se ...
随机推荐
- pytorch之LSTM
from:http://pytorch-cn.readthedocs.io/zh/latest/package_references/torch-nn/#recurrent-layers class ...
- gitminer
https://github.com/UnkL4b/GitMiner + Autor: UnK + Blog: https://unkl4b.github.io + Github: https://g ...
- python3迭代器和生成器
1.手动访问迭代器中的元素 #要手动访问迭代器中的元素,可以使用next()函数 In [3]: with open('/etc/passwd') as f: ...: try: ...: while ...
- 利用gcc自带的功能-fstack-protector检测栈溢出及其实现【转】
转自:https://www.cnblogs.com/leo0000/p/5719186.html 最近又遇到了一个崩溃,栈回溯非常怪异. /lib/i386-linux-gnu/libc.so.6( ...
- linux通过sendmail发送邮件
安装sendmail: [root@li676-235 ~]# yum install sendmail 安装好后执行. [root@li676-235 ~]# /etc/init.d/sendmai ...
- ldconfig命令与ldd命令
ldconfig是一个动态链接库管理命令,为了让动态链接库为系统所共享,还需运行动态链接库的管理命令 ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令. ...
- 使用Windows 2008R2中的NFS替代Samba协议,解决Windows 与Linux共享文件的问题
一.在Windows服务器上进行安装NFS服务 首先,打开服务管理器,选择添加角色: 选中文件服务,下一步: 出现一个提示,不管它,继续下一步: 在接下来的页面中选中“网络文件 ...
- ReentrantLock和AQS
AQS(AbstractQueuedSynchronizer)是JDK1.5提供的一个用来构建锁和同步工具的框架,子类包括常用的ReentrantLock.CountDownLatch.Semapho ...
- #ASP.NET 自制免费.NET代码生成器KevinCodeBuilder
简单的.NET三层架构会有很多重复的代码,如果手敲会比较浪费时间.前段时间在互联网找了下.NET的代码生成器,发现要么太复杂甚至生成的代码会报错,要么要收费而且效果不是自己想要的. 所以,干脆自己做一 ...
- php 批量导入昨天的数据(别类版的增量备份安案)
$where = ''; $localogLogin = $this->gamedb_model->query_onerow("select `datetime` from lo ...