<s:textfield>标签
中的value=“”还是挺有用的,比如说更新之前,根据需要更新的用户(地址、商品等等等等)的id,在updateInput方法中,先做一些准备,根据这个id去数据库取属性出来,放到ActionContext中,到时候取出来
在textfield标签,name="" value="" 以及在<s:property>标签中的value="";都是不一样的机制
先说<s:property>标签中的value="",这个是典型的ognl表达式的取值,
(先要说明的一件事就是,modeldriven把一个user对象暴露在外面,是为了封装参数传递过来的属性,只要表单提交或者url中有同名的参数,就会给user对象的属性赋值,并放在栈顶,但是,需要注意的是,这个是ModelDriven的效果,在没有ModelDriven之前,暴露在栈顶的其实是UserAction的属性域,尽管用属性域Struts2自动封装属性是不错的选择,但是毕竟属性太多,在在Action中写这些还是不合适, ModelDriven的出现,直接用一个对象作为属性即可。现在有了ModelDriven覆盖了栈顶,栈顶下面,还是有UserAction的属性域。所以简单说就是有两个User。)
<s:property>中,根据ognl表达式的规则:
1、加#,从actioncontext的map中取,"#key"得到的是key对应的value的值。如果value是一个map或者是一个对象,value.key(或者属性)可以在往里面取。这个比较简单。
2、不加#,从栈中取,比如栈顶是id,username group(这是个对象),栈顶之下是user userService(忽略它)等,那么赋值怎么赋,取值又怎么取呢?再比如说,栈顶之下也有id username属性,这个又怎么取?
先说赋值,参数中的group.id可以直接赋值给栈顶对象中的group属性,所以这个时候如果是user多对group一,那么如果想维护关系,不需要new 一个group,再set id,再new一个user,再setgroup,再saveuser,不需要这样,ModelDriven自己建了两个对象,user和group,并自动封装,group.id是由参数传进来,(这样对应的关系似乎比较难理解,但是如果是用户user和地址address的关系就好理解了,对一个用户添加一个地址),对一个组添加一个user,那么group.id直接过来,赋值进去,user的属性可以通过表单来传,那么就得到了一个实体user,一个实体group,就可以save了,而且关系还对应的非常好。
再说取值:不加#,现在栈顶找,找到了用这个值,如果找不到,分两种情况,第一种是没有这个属性,那么就往下找,找到了就获得这个值(这点很重要,比如user这个实体对象,在栈顶有一份,在栈底还有一份,栈顶的有可能已经接收了传过来的id,其他属性是null,但是栈底的user如果已经把load出来的对象赋给它并且开启了opensessioninviewer,那么可以直接在input表单中用ognl表达式取),第二种是有这个属性但是没有赋值,在<s:property>的ognl中是得到null,即使栈顶之下还有这个属性而且是赋值了的。这一点和El表达式不同。el表达式遇到没赋值的一直找到栈底(待核实)
再说<s:textfield>标签,在没有value标签干扰的情况下,name属性中的值的取值符合ognl的规则,和刚才<s:property>中的value取值是一样的,但是name的值是要用来传值给后面的所以不能改。
这就需要其中的value的值,value的值似乎不能取栈中的值,不过可以存到actioncontext中,这个时候要注意,用%{}来取值,在checkboxlist中可以用#{}来访问不过依然建议使用%{}
<s:textfield>标签的更多相关文章
- embed标签loop=true背景音乐无法循环
在html网页中加入背景音乐并设置为循环播放.一开始用<embed>标签,设置loop="true", 但是结果发现在IE浏览器可以,但是在chrome浏览器却无法实现 ...
- 【转】object标签和embed标签
我们现在大部分人做网页,都是直接用DW插入flash,而且DW也是所见即所得,直接生成了相应的flash显示代码.可是我们又有多少人了解这些直接由DW生成的代码呢?其实我接触flash player标 ...
- embed标签的使用(在网页中播放各种音频视频的插件的使用)
播放器插件使用说明: 代码:< EMBED src=“music.mid”autostart=“true”loop=“2”width=“80”height=“30”> src:音乐文件的路 ...
- as3.0 [Embed]标签嵌入外部资源
1.[Embed]嵌入资源 ActionScript代码的顺序非常重要.你必须在声明变量前添加[Embed]元数据标签,而且这个变量的类型会是Class; package { import flash ...
- 解决embed标签显示在div上层【转藏】
解决embed标签显示在div上层,非设置z-index 今天给屌炸了爆笑网增加了视频栏目,但是发现在IE8中,顶部浮动导航的div在移动到embed视频上时,总是被embed的flash文件盖住.分 ...
- OBJECT和EMBED标签(转载)
一.介绍: 我们要在网页中正常显示flash内容,那么页面中必须要有指定flash路径的标 签.也就是OBJECT和EMBED标签.OBJECT标签是用于windows平台的IE浏览器的,而EMBED ...
- 转: object 和embed 标签播放flash
一.介绍: 我们要在网页中正常显示flash内容,那么页面中必须要有指定flash路径的标 签.也就是OBJECT和 EMBED标签.OBJECT标签是用于windows平台的IE浏览器的,而EMBE ...
- OBJECT和EMBED标签
一.介绍: 我们要在网页中正常显示flash内容,那么页面中必须要有指定flash路径的标 签.也就是OBJECT和EMBED标签.OBJECT标签是用于windows平台的IE浏览器的,而EMBED ...
- HTML 5 <embed> 标签
定义和用法 <embed> 标签定义嵌入的内容,比如插件. 实例 <embed src="helloworld.swf" />
- chrome不支持embed标签解决方案
<!DOCTYPE html> <html> <head> <title></title> <meta http-equiv=&quo ...
随机推荐
- javaWeb 使用 filter 处理 html 标签问题
1.web.xml代码 <filter> <filter-name>HtmlFilter</filter-name> <filter-class>de. ...
- php计算两个日期相差 年 月 日
在PHP程序中,很多时候都会遇到处理时间的问题,比如:判断用户在线了多长时间,共登录了多少天,两个帖子发布的时间差或者是不同操作之间的日志记录等等.在文章中,简单地举例介绍了PHP中如何计算两个日期相 ...
- JS去掉数组的重复项
自己知道思路怎么去,但是就是自己不会写,在网上找了一些来看,有些还是没有怎么看明白.学习到了这么一种方法 var a=['ss','dd','ss','cc','dd',1,2,1] var b={} ...
- 2015弱校联盟(1) -A. Easy Math
A. Easy Math Time Limit: 2000ms Memory Limit: 65536KB Given n integers a1,a2,-,an, check if the sum ...
- void与void *
转载:http://blog.csdn.net/geekcome/article/details/6249151 void的含义 void即“无类型”,void *则为“无类型指针”,可以指向任何数据 ...
- easyui datagrid 仿ext—右键
var createGridHeaderContextMenu = function(e, field) { e.preventDefault(); var grid = $(this);/* gri ...
- C++string中有关大小和容量的函数浅析
1.length()与size() length是因为沿用C语言的习惯而保留下来的,string类最初只有length,引入STL之后,为了兼容又加入了size,它是作为STL容器的属性存在的,便于符 ...
- 继续Kanzi
转眼间,Kanzi已经发展到3.3版本了,之前研究过的东西,今天有空下了个版本跟进更新看看有没有什么变化.新的引擎跟以前2.x版本有很大的差别.新引擎增加了很多新功能(包括局部刷新技术),也跟随大潮加 ...
- 学习mongo系列(十一)关系
准备工作:首先在maxh数据库的address集合中先插入数据 > db.address.insert({child_address:"gansu"}) WriteResul ...
- cordova环境搭建,搭建项目,以及拍照功能的实现
一.配置环境 1.配置java环境: 下载对应系统环境的jdk:http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-13 ...