struts基于ognl的自动类型转换需要注意的地方
好吧,坎坷的过程我就不说了,直接上结论:
在struts2中使用基于ognl的自动类型转换时,Action中的对象属性必须同时添加get/set方法。
例如:
客户端表单:
<s:form action="registPro">
<s:textfield name="user.id" label="id"/>
<s:textfield name="user.name" label="用户名"/>
<s:textfield name="user.pass" label="密码"/>
<s:textfield name="user.age" label="年龄"/>
<s:textfield name="user.birth" label="生日"/>
<s:submit value="注册"/>
</s:form>
Action代码:
public class RegistAction extends ActionSupport {
private User user;
@Override
public String execute() throws Exception {
System.out.println("age: " + user.getAge());
return SUCCESS;
}
public void setUser(User user) {
System.out.println("in setUser : " + user.getAge());
this.user = user;
}
public User getUser() { // 必须添加get方法,否则在execute方法中无法获得user对象的任何属性。
return user;
}
}
一开始我认为只要set方法就行了,想当然的只写了set方法。我认为当struts获取到表单参数组装成一个user对象以后,会通过set方法把组装好的user对象设置进Action。
但是最后我在set方法中打印传递进来的user对象值时发现所有的属性都是默认值,当然在execute方法中也无法获取user的值。
经过这个bug我猜测(仅仅是猜测,没有看源代码,如果哪位大神知道请告诉我)调用set方法是仅仅获取的是个空对象,当在execute方法中直接调用user属性值时会再去调用get方法获取 有值 的user对象。
郁闷了将近一天,就剩没有调试源代码了(因为myeclipse中绑定sun.reflect包源代码时出现点问题,所以没有调试成功,幸好没有调试,否则更晕!!!)。
望小伙伴们不要再犯我这样的错误
struts基于ognl的自动类型转换需要注意的地方的更多相关文章
- Struts 2 OGNL
1.什么是OGNL? 2.Struts 2 OGNL 表达式 ====================== 华丽丽的分割线 ====================== 1.什么是OG ...
- python 基础之自动类型转换和强制类型转换
一:自动类型转换 自动类型转换注意针对Number数据类型来说的 当2个不同类型的数据进行运算的时候,默认向更高精度转换 数据类型精度从低到高:bool int float complex #关于bo ...
- JavaScript系列文章:自动类型转换-续
在上一篇文章中,我们详细讲解了JavaScript中的自动类型转换,由于篇幅限制,没能覆盖到所有的转换规则,这次准备详细讲解一下. 上次我们提到了对象类型参与运算时转换规则: 1). 在逻辑环境中执行 ...
- JavaScript系列文章:自动类型转换
我们都知道,JavaScript是类型松散型语言,在声明一个变量时,我们是无法明确声明其类型的,变量的类型是根据其实际值来决定的,而且在运行期间,我们可以随时改变这个变量的值和类型,另外,变量在运行期 ...
- Unity3.0基于约定的自动注册机制
前文<Unity2.0容器自动注册机制>中,介绍了如何在 Unity 2.0 版本中使用 Auto Registration 自动注册机制.在 Unity 3.0 版本中(2013年),新 ...
- 模拟登录神器之PHP基于cURL实现自动模拟登录类
一.构思 从Firefox浏览器拷贝cURL命令(初始页.提交.提交后) 自动分析curl形成模拟登录代码 默认参数:ssl/302/gzip 二.实现 接口 (一)根据curl信息执行并解析结果 p ...
- 推荐一款超强大的基于Angularjs的自动完成(Autocomplete)标签及标签组插件–ngTagsInput
前言 今天利用中午午休时间,给大家分享推荐一款基于Angularjs的自动完成(Autocomplete)标签及标签组插件--ngTagsInput,功能超强大的.不信,你试试就知道^_^... Au ...
- 慕课网-安卓工程师初养成-2-9 Java中的自动类型转换
来源:http://www.imooc.com/code/1236 在 Java 程序中,不同的基本数据类型的数据之间经常需要进行相互转换.例如: , 代码中 int 型变量 score1 可以直接为 ...
- 【转】JavaScript系列文章:自动类型转换
我们都知道,JavaScript是类型松散型语言,在声明一个变量时,我们是无法明确声明其类型的,变量的类型是根据其实际值来决定的,而且在运行期间,我们可以随时改变这个变量的值和类型,另外,变量在运行期 ...
随机推荐
- MySQL Where 条件
WHERE 条件 有时候操作数据库时,只操作一些有条件限制的数据,这时可以在SQL语句中添加WHERE子句来规定数据操作的条件. 语法: SELECT column,… FROM tb_name WH ...
- js的继承
js要实现继承有很多方法,个人总结大致分为三种: function people(){ this.specials = "人类"; } function p1(name){ thi ...
- java基础 作业(一)
题目: 跳水比赛,8个评委打分.运动员的成绩是8个成绩去掉一个最高分,去掉一个最低分,剩下的6个分数 的平均分就是最后 得分.使用以为数组实现打分功能 .请把打分最高的评委和最低的评委找出来. 解析: ...
- word20161210
gateway / 网关 gateway account / 网关帐户 Gateway Service for NetWare / NetWare 网关服务 GDI objects / GDI 对象 ...
- gulp使用技巧-删除node_modules文件夹,解决目录层次太深删除报错的问题
问题描述: 在使用gulp当中,自动生成的node_modules文件夹,因为文件目录层级太深,无法系统删除,用360粉碎工具也报错 解决方法: 使用npm中的插件rimraf,专门用于删除的模块插件 ...
- jquery 赋值文本框输入框
jQuery("#mrId option[value='" + extValue + "']").attr("selected", true ...
- MySQL5.6 PERFORMANCE_SCHEMA 说明
背景: MySQL 5.5开始新增一个数据库:PERFORMANCE_SCHEMA,主要用于收集数据库服务器性能参数.并且库里表的存储引擎均为PERFORMANCE_SCHEMA,而用户是不能创建存储 ...
- MVC 前台获取三级菜单及子菜单
1.在后台将所有的菜单获取出来,代码如下: public ActionResult Index() { //所有商品分类 var oneMenu = _baseGoodsCategory.FindLi ...
- css3 transition
<html> <head lang="en"> <meta charset="UTF-8"> <title ...
- 在Windows10 64位 Anaconda4 Python3.5下安装XGBoost
系统环境: Windows10 64bit Anaconda4 Python3.5.1 软件安装: Git for Windows MINGW 在安装的时候要改一个选择(Architecture选择x ...