`
ykyfendou
  • 浏览: 404203 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts2的 ognl标签使用笔记

阅读更多

1、页面直接输出值:

在页面中打印存放于request范围内的message的值:

 

<s:property value="#request.message"/>

 

 

 2、迭代集合:

迭代(遍历)request范围内的一个listdeptList,获得部门信息,然后遍历每一个部门中的所有的员工集合: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,timedatatime, 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>&nbsp;<s:property value="%{getText('{0,date,yyyy-MM-dd }',{updateTime})}"/></td>--时间直接格式化--
<td>&nbsp;
<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>&nbsp;<s:property value="author"/> </td>
<td>&nbsp;<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、迭代集合的时候动态设置divinput等页面对象的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,我们需要设置这个inputid值,然后在js中通过

document.getElementById()

 

来得到这个input,然后再进行操作。

但是如果我们在遍历的过程中如果把inputid值设置为input_1的话,那么在遍历的时候每遍历一个user,就会相应的产生一个idinput_1input,那么在js中获得idinput_1这个input的时候,获得的就不会是我们要操作的这个input对象了。

 

这时我们就需要动态的生成htmldiv或者input等的id值,如果我们根据遍历中的某些不会重复的信息,来设置这个inputid值的话,那么在js中操作input的时候,就不会因为很多个input都有同一个id值而无法获得我们要操作的input了。

 

 

我们可以把每一个user的主键值得到,然后把这个主键值放在div或者inputid中,由于主键在数据库中是唯一的,那么就可以保证这个id在遍历的时候是不重复的了。

 

我们在设置div或者inputid的时候,不能直接进行字符串的拼装:

 

<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或者inputhtml页面对象的id中,作为id的一部分了。就可以保证每一个id都不是重复的了。

如果有多个html标签需要动态设置id,可以在id前加上一个不同的前缀,就可以保证在一次遍历的时候生成的id值是不同的了,如上面的divinputid设置。

 

如下:我们可以测试一下:

 

<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>

测试结果是正确的。

 

分享到:
评论

相关推荐

    struts2 OGNL语言学习笔记

    本人在学习struts2框架时的学习笔记,主要是ognl表达式语言的运用。希望对大家有所帮助!

    OGNL学习笔记,包含struts2中ognl的各种用法

    struts2 OGNL的主要用法 基本覆盖全部

    Struts2_OGNL 笔记

    OGNL是通常要结合Struts 2的标志一起使用,如等。大家经常遇到的问题是#、%和$这三个符号的使用。下面我想通过例子讲述这个问题: 首先新建名为Struts2_OGNL的Web工程,配置开发环境。之前很多朋友在使用Struts 2的...

    struts2 学习重点笔记

    这是学习struts2时记得重点笔记,包括了一些原理,ognl语句的编写,以及如何设置拦截器等等一些基本知识,起到复习和巩固的作用

    struts2课程笔记

    struts2知识点:处理流程,基本配置,与servlet的API解耦,结果类型,通配符和动态方法的调用,类型转换,文件上传,拦截器,表单验证,国际化,OGNL表达式,UI标签,模型驱动,防止表单重复提交,项目练习知识点:...

    Struts2 学习笔记

    Struts2标签目录 28 一、 property标签 28 二、 set标签 29 三、 bean标签 29 四、 标签-少使用 29 五、 If elseif else 30 六、 Iterator标签 31 七、 Theme 31 05设计约定(编码规定) 32 06 项目开发顺序 32 07 ...

    Struts 2.1.8_学习源码

    Struts2_03Taglib : Struts2常用标签的使用方法 Struts2默认支持OGNL、JSTL、Groovy和Velcity表达式 Struts2_04ActionResultType : Struts2关于Action跳转类型的应用 对各种不同的跳转类型使用的实例 Struts2_05...

    Struts2.1学习笔记

    基于 Struts2.1.8 包括Struts2的基本应用、文件上传、拦截器、输入校验、国际化、OGNL表达式、Struts2标签等内容。

    struts2的学习笔记+测试源代码

    struts2的ognl表达式 博文链接:https://wuzhaohuixy-qq-com.iteye.com/blog/710102

    框架笔记struts2

    struts,sprint,hibernate,框架笔记,OGNL表达式 国际化验证,ajax等

    struts学习笔记(4)

    15.OGNL表达式 对象图导航语言 Object Graph Navigation Language 是一种比较强大的表达式语言(比EL表达式的功能...1)ognl表达式只能写在Struts2标签的里面(任何一个struts2标签都行) EL表达式可以写在页面的任何位置

    struts2.0笔记+中文文档

    知识点: ready, tag, action, internationalization, converter, validation, interceptor,ioc,file upload, crud, ognl,struts2&ajax struts1&struts2

    Struts学习笔记.txt

    Struts2 必备5个jar包: commons-logging-api-1.1.jar freemarker-2.3.8.jar ognl-2.6.11.jar struts2-core-2.0.8.jar xwork-2.0.3.jar

    Java学习笔记-个人整理的

    \contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...

Global site tag (gtag.js) - Google Analytics