zoukankan      html  css  js  c++  java
  • OGNL表达式+常用Struts2tags

    1. OGNL表达式

     

     

    只有给user.xxx传值,它才会自动构造,想初始化model,第一是可以自己NEW,第二就是传递参数进去,但这时候必须保持参数为空的构造方法在model

     

    F:访问值栈中的action的普通属性: username = <s:property value="username"/>

    Username—是OGNL表达式

    B:Private String username(包括get,set)

     

    F:访问值栈中对象的普通属性(get set方法)<s:property value="user.age"/> | <s:property value="user['age']"/> | <s:property value="user[\"age\"]"/> | wrong:

    B:private User user(包括get,set)

     

    F:访问值栈中对象的普通属性(get set方法): <s:property value="cat.friend.name"/>

    B:Action中有个private Cat cat, Cat中有个private Dog friend

     

     

    其他:

    普通方法

    F: 访问值栈中对象的普通方法:<s:property value="password.length()"/>

    F: 访问值栈中对象的普通方法:<s:property value="cat.miaomiao()" /

    F: 访问值栈中action的普通方法:<s:property value="m()" />

     

    静态方法

    Struts.xml中 

    <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>

    F: 访问静态方法:<s:property value="@com.bjsxt.struts2.ognl.S@s()"/>

    F: 访问静态属性:<s:property value="@com.bjsxt.struts2.ognl.S@STR"/>

    F: 访问Math类的静态方法:<s:property value="@@max(2,3)" />

     

    构造方法

    F: 访问普通类的构造方法:<s:property value="new com.bjsxt.struts2.ognl.User(8)"/>

     

    访问LIST

    访问List:<s:property value="users"/>

    访问List中某个元素:<s:property value="users[1]"/>

    访问List中元素某个属性的集合:<s:property value="users.{age}"/>

    访问List中元素某个属性的集合中的特定值:<s:property value="users.{age}[0]"/> | <s:property value="users[0].age"/>

    访问Set:<s:property value="dogs"/>

    访问Set中某个元素:<s:property value="dogs[1]"/>//无法访问,因为Set无序

    访问Map:<s:property value="dogMap"/>

    访问Map中某个元素:<s:property value="dogMap.dog101"/> | <s:property value="dogMap['dog101']"/> | <s:property value="dogMap[\"dog101\"]"/>

    访问Map中所有的key:<s:property value="dogMap.keys"/>

    访问Map中所有的value:<s:property value="dogMap.values"/>

    访问容器的大小:<s:property value="dogMap.size()"/> | <s:property value="users.size"/>

     

    投影

    实际就是过滤,把符合条件的过滤出来。

    投影(过滤)<s:property value="users.{?#this.age==1}[0]"/>

    遍历USERS集合,然后取出来集合里面age==1的第一个元素

    投影:<s:property value="users.{^#this.age>1}.{age}"/>

    ^表示开头的,取出开头age>1的那个userage

    投影:<s:property value="users.{$#this.age>1}.{age}"/>

    $表示结尾的,取出结尾age>1的那个userage

    投影:<s:property value="users.{$#this.age>1}.{age} == null"/>

     

    投影: []:<s:property value="[0].username"/>

    表示访问的Stack(就是DEBUG里面的值栈)从上到下的最顶上的元素一直到栈底所有的元素

     

     

     

    2. 常用Struts2-tags 

    Docs\docs\ generic-tag-reference.html//文档路径

     

    property: <s:property value="username"/> 

    由于value的值是一个Object类型的表达式,所以会把它转换成OGNL表达式输出值.

    property 取值为字符串: <s:property value=" 'username' "/>

    property 设定默认值: <s:property value="admin" default="管理员"/>

    property 设定HTML: <s:property value="'<hr/>'" escape="false"/>

     

     

    set 设定adminName值(默认为request 和 ActionContext:

     <s:set var="adminName" value="username" />

    username的值既放到request又放到ActionContext里面

    用途:用SET标签给属性特别长的名字换名字

    set request取值: <s:property value="#request.adminName" />

    set ActionContext取值: <s:property value="#adminName" />

     

    set 设定范围: <s:set name="adminPassword" value="password" scope="page"/>

    set 从相应范围取值: <%=pageContext.getAttribute("adminPassword") %>

    set 设定var,范围为ActionContext: <s:set var="adminPassword" value="password" scope="session"/>

    set 使用#取值: <s:property value="#adminPassword"/>

    set 从相应范围取值: <s:property value="#session.adminPassword"/>

    bean 定义bean,并使用param来设定新的属性值:

    <s:bean name="com.bjsxt.struts2.tags.Dog" var =”myDog”>

    <s:param name="name" value=" 'pp' "></s:param>

    用单引号因为返回值是一个OGNL表达式它找不到,所以用单引号让它变成字符串

    <s:property value="name"/>

    </s:bean>

    生成一个Bean的对象,你在debug里面找不到这个值,因为你没给他加VAR标识。

     

    bean 查看debug情况:

    <s:bean name="com.bjsxt.struts2.tags.Dog" var="myDog">

    <s:param name="name" value="'oudy'"></s:param>

    </s:bean>

    拿出值:

    <s:property value="#myDog.name"/>

     

    include 

    include _include1.html 包含静态英文文件

    <s:include value="/_include1.html"></s:include>

    include _include2.html 包含静态中文文件

    <s:include value="/_include2.html"></s:include>

    目前包含中文获取不到

    include _include1.html 包含静态英文文件,说明%用法

    <s:set var="incPage" value="%{'/_include1.html'}" />

     

    在值栈中直接取:<s:property value="username"/>

    在ActionContext中<s:property value="#username"/>

    %{}讲里面的内容强制转换成OGNL表达式

    <s:include value="%{#incPage}"></s:include>

     

     

     

    $ # %的区别

    a) $用于i18n和struts配置文件

    b) #取得ActionContext的值

    c) %将原本的文本属性解析为ognl,对于本来就是ognl的属性不起作用

    i. 参考<s:property 和 <s:include

     

     

    if elseif else: 

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

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

    利用set标签把#parameters.age[0]改成age这样简化代码

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

    <s:elseif test="#parameters.age[0] < 20">too young!</s:elseif>

    <s:else>yeah!</s:else><br />

     

    <s:if test="#parameters.aaa == null">null</s:if>

    如果AAA等于NULL 就输出NULL

     

     

    遍历集合:<br />

    <s:iterator value="{1, 2, 3}" >

    <s:property/> |

    </s:iterator>

    {}里面的值代表一个LIST

     

    自定义变量:<br />

    <s:iterator value="{'aaa', 'bbb', 'ccc'}" var="x">

    Varà把他们都放到x中去了

    <s:property value="#x.toUpperCase()"/> |

    </s:iterator>

    看到var他就放到ActionContext里面了,之后就用#号将他们取出

     

     

    使用status:<br />

    <s:iterator value="{'aaa', 'bbb', 'ccc'}" status="status">

    <s:property/> | 

    遍历过的元素总数:<s:property value="#status.count"/> |

     

    遍历过的元素索引:<s:property value="#status.index"/> |

     

    当前是偶数?:<s:property value="#status.even"/> |

     

    当前是奇数?:<s:property value="#status.odd"/> |

     

    是第一个元素吗?:<s:property value="#status.first"/> |

     

    是最后一个元素吗?:<s:property value="#status.last"/>

     

    </s:iterator>

     

     

     

    定义Map

    必须加#{}

    <s:iterator value="#{1:'a', 2:'b', 3:'c'}" >

    <s:property value="key"/> | <s:property value="value"/> <br />

    </s:iterator>

     

    <s:iterator value="#{1:'a', 2:'b', 3:'c'}" var="x">

    <s:property value="#x.key"/> | <s:property value="#x.value"/> <br />

    </s:iterator>

    拿出里面的变量:定义var=’x’

     

     

     

     

    总结:

     

    1. 值栈中的action的普通属性: username = <s:property value="username"/>

    2. ActionContext中的取值username = <s:property value="#username"/>

    3. %{}讲里面的内容强制转换成OGNL表达式

     

     

  • 相关阅读:
    Java编程思想:第8章 多态
    Java编程思想:第7章 复用类
    Java编程思想:第6章 访问权限控制
    Java编程思想:第5章 初始化与清理
    Java编程思想:第4章 控制执行流程
    Java编程思想:第3章 操作符
    sqoop常用命令记录
    sqoop从hive导出到mysql报错: failed with state FAILED due to: Task failed
    flink-sql解析canal-json实现实时同步
    hive爬坑
  • 原文地址:https://www.cnblogs.com/hzj680539/p/3060188.html
Copyright © 2011-2022 走看看