struts2的 ognl标签使用笔记
1、页面直接输出值:
在页面中打印存放于request范围内的message的值:
<s:property value="#request.message"/>
2、迭代集合:
迭代(遍历)request范围内的一个list:deptList,获得部门信息,然后遍历每一个部门中的所有的员工集合:empList:
<body> <table> <s:iterator id="dept" value="#request.deptList"> <tr> <td>部门名称</td> <td><s:property value="#dept.deptName" /></td> </tr> <tr> <td>所含员工</td> <td><s:iterator id="emp" value="#dept.empList"> <table> <tr> <td>员工姓名</td> <td><s:property value="#emp.empName" /></td> </tr> </table> </s:iterator></td> </tr> </s:iterator> </table> </body>
3、时间类型格式化输出:
<s:date name="#request.registDate" format="yyyy-MM-dd HH:mm:ss"/>
输出request范围的registDate值,注意,这个registDate变量值的类型必须是时间相关的类型才可以,如date,time,datatime, Timestamp等类型:
参考:
http://hi.baidu.com/huolanbishou/item/7d9ba8c3a948b7da97445215
1.按需输出特定长度的字符
例:<s:property val ="name.s string(0,4)" />,只输出name的前四个字符,其中name是我需要输出的字符串。
2.格式化输出日期
例:<s:property val ="%{getText('format.date',{createdDt})}"/>,这里说明一下,'format.date'是输出的日期的格式,这个配置在国际化资源文件中:format.date ={0,date,yyyy-MM-dd } ,其中的格式可以自己配置,createdDt是我要输出的日期。
这种格式化输出日期的方法也适用于别的标签,例如:<s:textfiled/>,也是一种比较通用的方法,另外再提供几种格式:format.time = {0,time}
format.number = {0,number,\#0.0\#\#}
format.percent = {0,number,\#\#0.00'%'}
format.money = {0,number,\¤\#\#0.00}
3.带格式的字符串不输出格式(像fckedit之类的编辑器就可以给文本加样式而又想在页面上按原样式输出来而不是输出html标签,此种方式就比较适用)
例:我想输出的title的内容是“<p>测试</p>”,只需加入属性escape="false"就行了:<s:property escape="false" val ="title"/>,这时输出来的就是“测试”,而不是“<p>测试</p>”。此属性也可以用于别的标签,具体的可以自己摸索。
例子:
<td colspan="8" bgcolor="#FFFFFF">相关报告</td> </tr> <tr> <td colspan="8" bgcolor="#FFFFFF"> <table width="635" cellspacing="1" cellpadding="0" border="0" bgcolor="#9ec7e6"> <tbody> <s:iterator value="#newslist" id="newsl" status="status"> <tr <s:if test="#status.odd">style="background-color:#ffffff"></s:if> <s:else>style="background-color:#eeeeee"></s:else> <td> <s:property value="%{getText('{0,date,yyyy-MM-dd }',{updateTime})}"/></td>--时间直接格式化-- <td> <s:if test="title.length>20"> <s:property value="title.substring(0,20)"escape="false"/>--截取字符串长度-- </s:if> <s:else> <s:property value="title" escape="false"/> </s:else> </td> <td> <s:property value="author"/> </td> <td> <s:property value="original"/></td> </tr> </s:iterator> </tbody> </table> </td>
参考:
使用<s:date>标签,有一个format属性,就是用来输出指定时间格式的
例如:<s:date name="publishTime" format="yyyy-MM-dd HH:mm:ss" />
<s:date name="birthday" format="yyyy-MM-dd" />
yyyy-MM-dd年月日 HH:mm:ss时分秒
但要注意两个细微的地方,很多人都倒在这上面:
1、"yyyy-MM-dd”中的“MM”一定要大写,不然会不起作用或者时间显示不正常
因为在java中,大M表示“月(Month)",而小m表示"分"(minute)
2、注意的是后面的"HH"表示24小时制,而如果是"hh",则显示时为12小时制
楼主可以自己验证下~~
还有一点:s:date标签使用时,一定要是Date类型。
如果是String型,数值型等其他类型,可以用以下方法:
先在resource文件中定义如下:
format.date_medium={0,date,medium}
format.date_ymd={0,date,yyyy/MM/dd}
format.date_time={0,date,yyyy/MM/dd hh:mm}
然后就可以*的format了:
<s:text name="format.date_ymd">
<s:param name="value" value="salesDate"/>
</s:text>
4、截取字符串:
<s:property val ="#request.name.s string(0,4)" /> <s:property value="releaseDate.substring(0,17)" />
5、迭代标签
<s:iterator id="user" value="#request.userList"> <div> <font color="black" style="font-size : 13px; font-family : 楷体" > <s:property value="#user.username"/> </font> </div> <div> <font color="black" style="font-size : 13px; font-family : 楷体" > <s:property value="#user.userAge"/> </font> </div> </s:iterator>
6、迭代集合的时候动态设置div,input等页面对象的id值:
在进行数据遍历迭代的时候,我们可能设置遍历中某个div或者其他页面对象的id值,然后通过js来操作当前user对象范围的div或者其他对象的信息,
<s:iterator id="user" value="#request.userList"> <div> <font color="black" style="font-size : 13px; font-family : 楷体" > <s:property value="#user.username"/> </font> </div> <div> <font color="black" style="font-size : 13px; font-family : 楷体" > <s:property value="#user.userAge"/> </font> </div> <input type="text" id="input_1" value="aaa"> </s:iterator>
如,我们需要在js中操作
<input type="text" id="input_1" value="aaa">
这个input,我们需要设置这个input的id值,然后在js中通过
document.getElementById()
来得到这个input,然后再进行操作。
但是如果我们在遍历的过程中如果把input的id值设置为input_1的话,那么在遍历的时候每遍历一个user,就会相应的产生一个id为input_1的input,那么在js中获得id为input_1这个input的时候,获得的就不会是我们要操作的这个input对象了。
这时我们就需要动态的生成html中div或者input等的id值,如果我们根据遍历中的某些不会重复的信息,来设置这个input的id值的话,那么在js中操作input的时候,就不会因为很多个input都有同一个id值而无法获得我们要操作的input了。
我们可以把每一个user的主键值得到,然后把这个主键值放在div或者input的id中,由于主键在数据库中是唯一的,那么就可以保证这个id在遍历的时候是不重复的了。
我们在设置div或者input的id的时候,不能直接进行字符串的拼装:
<input type="text" id="input_${user.userid}" value="aaa">
这样的话,页面是无法解析这个id值的,我们需要进行转换一下,把这个user.userid放在一个变量中,然后在这个变量中去取这个值:
<s:set name="uid" value="#user.userid"></s:set> <div id="div_${uid}">this is a div</div> <input type="text" id="input_${uid}" value="aaa">
这样,页面在解析的时候就会把uid的值放在div或者input等html页面对象的id中,作为id的一部分了。就可以保证每一个id都不是重复的了。
如果有多个html标签需要动态设置id,可以在id前加上一个不同的前缀,就可以保证在一次遍历的时候生成的id值是不同的了,如上面的div和input的id设置。
如下:我们可以测试一下:
<s:iterator id="user" value="#request.userList"> <div> <font color="black" style="font-size : 13px; " > <s:property value="#user.username"/> </font> </div> <div> <font color="black" style="font-size : 13px;" > <s:property value="#user.userAge"/> </font> </div> <s:set name="uid" value="#user.userid"></s:set> <div id="div_${uid}">this is a div</div> <input type="text" id="input_${uid}" value="${uid}"> <a href="JavaScript:outValue('input_${uid}')">outInputValue</a> </s:iterator> <script type="text/javascript"> function outValue(inputId){ alert(document.getElementById(inputId).value); } </script>
测试结果是正确的。
推荐阅读
-
Spring学习笔记之RedisTemplate的配置与使用教程
-
Java使用正则表达式删除所有HTML标签的方法示例
-
MyBatis中OGNL的使用教程详解
-
Mybatis传单个参数和
标签同时使用的问题及解决方法 -
在Intellij Idea中使用jstl标签库的方法
-
Spring学习笔记之RedisTemplate的配置与使用教程
-
SpringBoot入坑笔记之spring-boot-starter-web 配置文件的使用
-
.Net笔记:System.IO之Stream的使用详解
-
使用多点免费wifi让笔记本变成无线路由器的方法介绍
-
springboot 在ftl页面上使用shiro标签的实例代码