• struts2一些概念介绍和标签的使用


    依赖注入

    模块包含

    struts.xml的模块包含格式

    <include file="xx.xml" >

    OGNL  

    对象导航语言   有个超大的好处就是根据对象访问属性,避免混乱。

     OGNL标签分为:data tags和 control  tags

    一、数据标签

    property标签

    获取值栈中的普通对象

    <s:property   value=""/>

    是访问哪些有get和set的属性的方法

    name:<s:property value="name"/><br>
    name:<s:property value="user.name"/><br>

    访问值栈中的普通对象的普通方法

       1.password是String类型

       password:<s:property   value="password.length()"/><br>

       2.实体类中自定义对象的普通方法

    eat:<s:property   value="person.eat()"/><br>

       3.Action类中定义的普通方法

    <s:property   value="methodaction1()"/>

       4.访问集合

          1>array  

            和list一样

          2> list

               访问list

               <s:property   value="listname"/>

               访问list某个属性的集合

               <s:property   value="listname.{age}"/>

               访问list某个集合的某特定值

                <s:property   value="listname.{age}[0]"/>或者

                <s:property   value="listname[o].age"/>更容易理解和记忆

          3>set

              和list一样

          4>map

                     访问map单个元素

                     <s:property   value="mapname.key"/>或者 <s:property   value="mapname['key']"/>  单引号

                     访问map所有key

                     <s:property   value="mapname.keys"/>

                     访问map所有value

                     <s:property   value="mapname.values"/>

                     访问容器的大小

                      <s:property   value="mapname.size()"/>或者  <s:property   value="mapname.size"/>

    注:什么是普通方法和属性:就是非static的方法和非构造方法和属性

       5.访问静态方法和和属性(需要改设置)

     <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>struts.xml中修改

    <s:property   value="@全类名@方法或属性"/>

    6.投影

       users为set集合

       <s:property   value="users.{?#this.age==1}.{0}"/>

       <s:property   value="users.{^#this.age>1}.{age}"/>  age大于1集合中的第一个元素

       <s:property   value="users.{$#this.age>1}.{age}"/>  age大于1集合中的第后一个元素

       <s:property   value="users.{$#this.age==1}.{age}==null"/> 判断集合是否为空

    两者都可以但是第二个更明确。

    name:<s:property value="name"/><br>
    name:<s:property value="user.name"/><br>

    set标签

    <s:set var=""   value=""/>  value的type为object,可以用来重命名

    如:在浏览器中地址栏中输入...&age=-8

          <s:set var="age"   value="#parameters.age[0]"/>

          <s:if test="#age<0">wrong yong!</s:if>

    1. <s:set var=”includepage” value=”'/index.html'” />  
    2.  <s:property value=”#includepage” />
    3. <s:include  value="#includepage"  />     include标签value的type是字符串类型,"#includepage" 在解析的时候会被解析成字符串
    4. <s:include  value="%{#includepage}"  />这一个加上%{}就会被当做ognl表达式

     二、控制标签

    if标签 

     <s:if test=""></s:if>  test的type是布尔型 boolean

     iterator标签

    遍历集合:
    <s:iterator value="{'1','2','3'}">
    <s:property/>
    </s:iterator>
    <br>
    自定义变量:
    <s:iterator value="{'aa','bb','cc'}" var="w">
    <s:property value="#w.toUpperCase()"/>
    </s:iterator>
    <br>
    遍历map
    <s:iterator value="#{'a':'A','b':'B','c':'C'}">
    <s:property value="key"/>|<s:property value="value"/>
    </s:iterator>

    使用status

    使用status <br>
    <s:iterator value="{'aa','bb','cc'}" status="status">
    <s:property/>
    遍历过的总数:<s:property value="#status.count"/><br>
    当前遍历的的索引位置:<s:property value="#status.index"/><br>
    当前是奇数?:<s:property value="#status.even"/><br>
    当前是偶数?:<s:property value="#status.odd"/><br>
    当前是第一个元素?:<s:property value="#status.firt"/><br>
    当前是最后一个元素?:<s:property value="#status.last"/>
    <hr>
    </s:iterator>

     subset标签

    注:从例子可以看出定义list和map的差别

  • 相关阅读:
    Div在BOdy中居中
    c_lc_填充每个节点的下一个右侧节点指针 I~II(递归)
    c_pat_哈密顿回路 & 最大点集 & 是否是旅行商路径 & 欧拉路径 & 最深的根(邻接矩阵存图)
    c_lc_二叉搜索树的最近公共祖先 & 二叉树的最近公共祖先(利用性质 | 从p,q开始存储每个结点的父亲)
    c_pat_树题大杂烩(利用性质)
    现在的我,理解了这种「激情」
    b_pat_排成最小的数字 & 月饼(字符串拼接比较a+b<b+a)
    c_lc_二叉搜索树中的众数(中序遍历+延迟更新前驱结点)
    b_pat_分享 & 链表排序 & 链表去重(链表模拟)
    b_pat_弹出序列(栈模拟)
  • 原文地址:https://www.cnblogs.com/keyi/p/6237466.html
Copyright © 2020-2023  润新知