码迷,mamicode.com
首页 > 其他好文 > 详细

struts2 基础5

时间:2018-01-27 00:29:27      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:efault   names   text   pos   check   奇数   显示   cape   html   

OGNL表达式
    OGNL:对象导抗图语言
OGNL表达式是一个上下文的概念,上下文Map结构
OGNL表达式需要使用#标注命名空间。访问上下文(Context)中的对象需要使用#符号标注命名空间,如#application、#session 
    OGNL表达式结构
        valueStack(值栈):
            List 取值直接写            
        访问以下内容需要"#"开始
            application:上下文中的Map
            session: HttpSession中的Map
            request: HttpRequest中的Map
            parameters:请求参数的Map(paramValues)
            attr:findAttribute(查找顺序page--request--session--application)

OGNL表达式语言

 1 访问上下文(Context)中的对象需要使用#符号标注命名空间,如#application、#session 
 2 另外OGNL会设定一个根对象(root对象),在struts2中根对象就是ValueStack(值栈)。
   如果要访问根对象(即ValueStack)中对象的属性,则可以省略#命名空间,直接访问该对象的属性即可。
 3 在root变量中处于第一位的对象叫栈顶对象。通常我们在OGNL表达式里直接写上属性的名称即可访问root变量里对象的属性,
   搜索顺序是从栈顶对象开始寻找,如果栈顶对象不存在该属性,就会从第二个对象寻找,如果没有找到就从第三个对象寻找,
   依次往下访问,直到找到为止。
  • 如果访问其他Context中的对象,由于他们不是根对象,所以在访问时,需要添加#前缀

  • application对象:用于访问ServletContext,例如#application.userName或者#application[‘userName’],相当于调用ServletContext的getAttribute(“username”)。

  • session对象:用来访问HttpSession,例如#session.userName或者#session[‘userName’],相当于调用session.getAttribute(“userName”)。

  • request对象:用来访问HttpServletRequest属性(attribute)的Map,例如#request.userName或者#request[‘userName’],相当于调用request.getAttribute(“userName”)。

  • parameters对象:用与访问HTTP的请求参数,例如#parameters.userName或者#parameters[‘userName’],相当于调用request.getParameter(“username”)。

  • attr对象:用于按page->request->session->application顺序访问其属性。

操作集合对象

Ognl有一个上下文(Context)概念,说白了上下文就是一个MAP结构,它实现了java.utils.Map接口,在Struts2中上下文(Context)的实现为ActionContext,下面是上下文(Context)的结构示意图

技术分享图片


常用标签:
property:用于输出指定值
    <s:set name=“name” value=“kk”/>
    <s:property value=“#name”/>
    value:可选属性,指定需要输出的属性值,如果没有指定该属性,则默认输出ValueStack栈顶的值。    
    default:可选属性,如果需要输出的属性值为null,则显示该属性指定的值
    escape:可选属性,指定是否格式化HTML代码
    id:可选属性,指定该元素的标识。(过时)
    
Iterate:标签用于对集合进行迭代,这里的集合包含List、Set和数组。
    <s:set name=“list” value=“{‘a’,’b’,’c’}”/>
    <s:iterator value=“#list” status=“st”>
        <font color=<s:if test=“#st.odd”>red</s:if><s:else>blue</s:else>>
        <s:property/></font><br/>
    </s:iterator>
    Value:可选属性,指定被迭代的集合,如果没有设置该属性,则使用ValueStack栈顶的集合。
    id:可选属性,指定该元素的标识。(过时)
    status:可选属性,该属性指定迭代时的IterateStatus实例。该实例包含如下几个方法:
    int getCount(),返回当前迭代了几个元素。
    int getIndex(),返回当前迭代元素的索引。
    boolean isEven(),返回当前被迭代元素的索引是否是偶数。
    boolean isOdd(),返回当前被迭代元素的索引是否是奇数。
    boolean isFirst(),返回当前被迭代元素是否是第一个元素
    boolean isLast(),返回当前被迭代元素是否是最后一个元素

实例:

  <body>
    <s:property value="username"/><br> <s:property /><!-- 默认取栈顶对象 --> <hr> <s:set var="list" value="{‘a‘,‘b‘,‘c‘}"></s:set> <s:iterator value="#list"> <s:property/> <!-- 遍历时,会将当前遍历的元素放到栈顶 --> </s:iterator> <hr> <s:set var="map" value="#{‘a‘:‘aa‘,‘b‘:‘bb‘,‘c‘:‘cc‘}"></s:set> <s:iterator value="#map"> <s:property/> <s:property value="key"/>--<s:property value="value"/> <!-- 遍历时,会将当前遍历的元素放到栈顶 --> </s:iterator> <hr> <!-- 把一个字符串当成表达式,所以要再加一对引号表字符串 --> <%-- <s:set var="grade" value="‘A‘" /> --%> <s:set var="grade" value="‘A‘"></s:set> <s:if test="#grade==‘A‘">优秀</s:if> <s:elseif test="#grade==B">良好</s:elseif> <s:else>一般</s:else> <hr> <s:url action="a3" namespace="/test" var="url"> <s:param name="username" value="‘liu‘"/> <s:param name="age" value="‘20‘"/> </s:url> <s:property value="#url"/> <a href=<s:property value="#url"/>>点击</a> <s:a href="%{url}">请点击</s:a> <hr> <!-- 把表达式当成字符串,如果使其当成表达式加 %{ } --> <s:set value="‘addCustomer‘" var= "addr"></s:set>      <%-- <s:url value="addr" /> --%> <s:url value="%{addr}"></s:url>   </body>

 <body>    <s:form action="aa" namespace="/test"> <s:textfield name="username" label="用户名"></s:textfield> <s:password name="password" label="密码"></s:password> <s:checkboxlist name="hobby" list="{‘吃饭‘,‘睡觉‘,‘打豆豆‘}" value="{‘吃饭‘,‘睡觉‘}"></s:checkboxlist> <s:checkboxlist list="#{‘0531‘:‘济南‘,‘青岛‘:‘0532‘ }" name="pro" listKey="value" listValue="key"></s:checkboxlist> <s:radio list="#{‘0‘:‘男‘,‘1‘:‘女‘ }" name="sex" value="0"></s:radio> <s:select list="#{‘0‘:‘男‘,‘1‘:‘女‘ }" name="sex" value="1"></s:select> </s:form>
 </body>   <body>      <!-- 默认放置ActionContext 上下文中 scope="action" --> <s:set var="list1" value="{‘a‘,‘b‘,‘c‘}"></s:set> <s:set var="list2" value="{‘aa‘,‘bb‘,‘cc‘}" scope="session"></s:set> <s:set var="map1" value="#{‘a‘:‘valuea‘,‘b‘:‘valueb‘ }" scope="session"></s:set> list1[1]: <s:property value="#list1[1]"/> <br> session.list2[1]: <s:property value="#session.list2[1]"/> <br> iterator(var)-list1: <s:iterator value="#list1" var="me"> <s:property value="#me"/> </s:iterator> <br> iterator-list1: <s:iterator value="#list1" > <s:property /> </s:iterator> <hr color="red"> iterator-session.map1: <s:iterator value="#session.map1" var="map"> <s:property value="#map.key"/>=<s:property value="#map.value"/> </s:iterator> <hr color="red"> if-lc in {}: <s:if test="‘lc‘ in {‘lc‘,‘wwg‘}">lc存在</s:if> <s:else>lc不在</s:else> <br> if-lc not in {}: <s:if test="‘lc‘ not in {‘lc‘,‘wwg‘}">lc存在</s:if> <s:else>lc不在</s:else>
  </body>

 

 技术分享图片

技术分享图片

 

 

 

 

技术分享图片

 

struts2 基础5

标签:efault   names   text   pos   check   奇数   显示   cape   html   

原文地址:https://www.cnblogs.com/liuyangv/p/8361959.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!