Struts2_07_Ognl与Struts2标签

1.      Ognl 表达式

OGNLObject-Graph Navigation Language),大概可以理解为:对象图形化导航语言。是一种可以方便地操作对象属性的开源表达式语言。

OGNL有如下特点:    

1、支持对象方法调用

2、支持类静态的方法调用和值访问   

3、支持赋值操作和表达式串联

4、访问OGNL上下文(OGNL context)和ActionContext   

5、操作集合对象。 

 

 

       <!--

       s:set 定义一个变量,使用ognl表达式赋值,并放在某个作用域中

       @var 变量名

       @value 变量值,使用ognl表达式,字符串常量用‘’括起来,默认值value stack 栈顶的值

       @scope 变量所放作用域 requset,session,application, page,action,默认值requestaction

        -->

 

 

       <!-- 定义数字 -->

       <s:set var="age" value="14" scope="action"></s:set>

       <!-- 定义字符串常量 -->

       <s:set var="str" value="'hello'" scope="request"></s:set>

       <!-- 定义对象 -->

       <s:set var="user" value="new com.puckasoft.vo.User('admin','123456')"

           scope="session"></s:set>

       <!-- 定义数组 -->

       <s:set var="arr" value="{12,455,3,99,1008,876}"></s:set>

       <s:set var="list" value="{'康熙','雍正','乾隆'}"></s:set>

       <!-- 定义map -->

       <s:set var="map" value="#{'apple':123,'banana':456,'orange':789}"></s:set>

       <!-- 定义对象数组-->

       <s:set var="users"

           value="{

           new com.puckasoft.vo.User('aa','11'),

           new com.puckasoft.vo.User('bb','22'),

           new com.puckasoft.vo.User('cc','33'),

           new com.puckasoft.vo.User('dd','44'),

           new com.puckasoft.vo.User('ee','55'),

           new com.puckasoft.vo.User('ff','66'),

           new com.puckasoft.vo.User('gg','77')

           }">

       </s:set>

 

 

       ognl 访问静态变量:

       访问静态方法struts.ognl.allowStaticMethodAccess=true

       <s:property value="@java.lang.Integer@MAX_VALUE" />

       <br />

       ognl 访问静态方法:

       <s:property value="@java.lang.Integer@valueOf('123')" />

       <br />

       ognl 访问Math类:

       <s:property value="@@max(3,5)" />

       <br />

 

       ognl 访问方法:

       <s:property value="#request.str.charAt(2)" />

       <br />

       ognl 访问page,request,session,application域中变量:

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

       <br />

       ognl 访问栈上下文中变量:

       <s:property value="#age" />

       <br />

       ognl 调用变量的普通:

       <s:property value="#session.user.uname" />

      

       <s:property value="#session.user['uname']" />

      

       <s:property value="#session.user[\" uname\"]"/>

       <br />

 

       ognl 访问list

       <s:property value="#list" />

       <br />

       ognl 访问list中第2个元素:

       <s:property value="#list[1]" />

       <br />

       ognl 访问list的大小:

       <s:property value="#list.size()" />

      

       <s:property value="#list.size" />

       <br />

       ognl 访问list中元素某个属性的集合:

       <s:property value="#users.{uname}" />

       <br />

       投影 筛选出元素>100

       <s:property value="#arr.{?#this>100}" />

       <br />

       筛选出第一个元素>100

       <s:property value="#arr.{^#this>100}" />

       <br />

       筛选出最后一个元素>100

       <s:property value="#arr.{$#this>100}" />

       <br />

 

       ognl 访问map

       <s:property value="#map" />

       <br />

       map中的key集合:

       <s:property value="#map.keys" />

       <br />

       map中的value集合:

       <s:property value="#map.values" />

       <br />

       mapkey=banana对应的value值:

       <s:property value="#map.banana" />

      

       <s:property value="#map['banana']" />

      

       <s:property value="#map[\" banana\"]"/>

       <br />

       map的大小:

       <s:property value="#map.size()" />

       <br />

 

       ognl 访问地址栏参数:

       <s:property value="#parameters.a[0]" />

       <br />

 

      

 

       <s:debug></s:debug>

   

 

      

% # $ 总结

 

#符号有三种用途:   

  

(1)、访问非根对象(struts中值栈为根对象)如OGNL上下文和Action上下文,#相当于ActionContext.getContext()

(2)、用于过滤和投影

(3)、构造Map 

 

  

%符号的用途

在标签的属性值被理解为字符串类型时,告诉执行环境%{}里的是OGNL表达式。 类似javascript里面的eval()功能

  

  

$有两种用途   

  

(1)、在国际化资源文件中,引用OGNL表达式。   

(2)、在Struts 2配置文件中,引用OGNL表达式

 

 

 

2.Struts2 标签

<s:property>

<!--

       s:property 输出变量的值

       @value ognl表达式

       @default 默认值

       @escape 转义

        -->

 

       <s:property value="'<b>I am happy<b>'" escape="false" />

       <br />

       <s:property value="#e" default="abc" />

       <br />

       <s:debug></s:debug>

<s:include>

<s:if>

       <s:include value="/01_ognl_set_property_debug.jsp"></s:include>

 

       <s:if test="#age <18">儿童</s:if>

       <s:elseif test="#age < 60">成年人</s:elseif>

       <s:else>老人</s:else>

 

<s:iterator>

<s:include value="/01_ognl_set_property_debug.jsp"></s:include>

 

       <s:if test="#list!=null && #list.size() >0">

           <ul>

              <s:iterator value="#list" var="name">

                  <li>

                     <s:property value="name" />

                  </li>

              </s:iterator>

           </ul>

       </s:if>

 

       <s:if test="#map!=null && #map.size()>0">

           <ul>

              <s:iterator value="#map" var="mapEntry">

                  <li>

                     <s:property value="#mapEntry.key" />

                     --

                     <s:property value="#mapEntry.value" />

                  </li>

              </s:iterator>

           </ul>

       </s:if>

 

       <table>

           <tr>

              <th>

                  序号

              </th>

              <th>

                  用户名

              </th>

              <th>

                  密码

              </th>

           </tr>

           <s:if test="#users!=null&&#users.size()>0">

              <s:iterator value="#users" var="user" status="i">

                  <tr

                     style='background-color: < s : if test = "#i.first" > red </ s : if >

                   < s : elseif test = "#i.last" > green </ s : elseif >

                   < s : elseif test = "#i.odd" > yellow </ s : elseif ><%--   奇数行,行号从1开始算 --%>

                   < s : elseif test = "#i.even" > blue </ s : elseif ><%--   偶数行,行号从1开始算 --%>'>

                     <td>

                         <s:property value="#i.index" />

                         <s:property value="#i.count" />

                     </td>

                     <td>

                         <s:property value="#user.uname" />

                     </td>

                     <td>

                         <s:property value="#user.pwd" />

                     </td>

                  </tr>

              </s:iterator>

           </s:if>

 

           <s:else>

              <tr>

                  <td colspan="2">

                     无记录!

                  </td>

              </tr>

           </s:else>

       </table>

 

<s:url>

    用户列表

<s:include value="/05_url.jsp"></s:include>

 

    <div>

       <s:iterator begin="1" end="10" var="i">

           <s:url var="url" namespace="user" action="list" includeParams="get"

              includeContext="true">

              <s:param name="pn" value="i" />

           </s:url>

           &nbsp;&nbsp;<a href="${url}"/>${i}</a>&nbsp;&nbsp;

       </s:iterator>

    </div>

 

<s:form>

<s:form action="/reg" method="post" enctype="multipart-formdata">

           <s:textfield name="uname" value="" label="用户名"></s:textfield>

           <s:password name="pwd" value="" label="密码"></s:password>

           <s:password name="pwd2" value="" label="确认密码"></s:password>

           <s:textfield name="email" value="" label="电子邮局"></s:textfield>

           <s:radio name="gender" value="" label="性别" list="#{'M':'','F':''}"

              listKey="key" listValue="value"></s:radio>

           <s:checkboxlist name="favs" value="" label="爱好"

              list="#{1:'购物',2:'看电影',3:'打游戏'}" listKey="key" listValue="value" />

           <s:select name="loc" value="" label="地区"

              list="#{1:'北京',2:'上海',3:'天津'}"></s:select>

           <s:textarea name="introduce" value="" label="自我介绍"></s:textarea>

           <s:checkbox name="agree" value="true" label="是否同意条款"></s:checkbox>

           <s:file name="photo" label="个人形象"></s:file>

 

           <s:hidden name="id" value="1"></s:hidden>

 

 

           <s:reset value="重置"></s:reset>

           <s:submit value="提交"></s:submit>

       </s:form>

 

<s:date>

    <s:date name="new java.util.Date()"  format="yyyy-MM-dd hh:mm:ss"/><br/>

    <sx:datetimepicker  ></sx:datetimepicker>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值