zoukankan      html  css  js  c++  java
  • struts2中的标签“# ”,“%{ }”,“%{# }”

    理解值栈(ValueStack)与上下文(StackContext):

               Struts2中有值堆栈和堆栈上下文的概念,你用 <s:debug />可以看出.

             值栈中的对象的不使用#,非值栈中的对象使用#
             当前action,或者处于action链中的action所拥有的属性,并且为该属性提供了getter和setter方法,那么在jsp中就不需要使用#,除此之外需要使用#,那么从这里你就可以知道action的属性如果提供了getter和setter方法,那么这些属性值就会放置到值栈中

      S标签中用#可以取出堆栈上下文中的存放的对象.
     
      用%{}可以取出存在值堆栈中的Action对象,直接调用它的方法.例如你的Action如果继承了ActionSupport .那么在页面标签中,用%{getText('key')}的方式可以拿出国际化信息. %{#}, 这是JSP2.1最新规范中的语法,是Struts2为其解决兼容性问题而写成%{#}的
     
      在域对象中使用%{#}
     
      比如%{#session.user.userName}
     
      将获得user对象的 userName属性值
     
      %{}强调的是从你设定的root点取
     
      %{}用于计算表达式
     
      如%{10+20}结果将输出30
     
      如%{"a"+"b"}结果将输出"ab"
     
      #通常强调从上下文取
     
      如#parameters.name[0]等价于request.getParameter("name")
     
      如#session.name等价于session.getAttribute("name")
     
      如#request.name等价于request.getAttribute("name")
     
      %{#}仍然用于计算表达式,只不过操作元可以是变量
     
    如先定义一个变量
     
      <s:set name="age" value="%{25}"/>
     
      则%{#age}将输出25,也可以省略"#",写为%{age}
     
      若将age加10,可这么写:
     
      %{#age+10},将输出30.不能省略"#"。也就说变量用于计算时不能省略"#"
     
     
     
      
     
      ognl中的#、%和$
     
      #、%和$符号在OGNL表达式中经常出现,而这三种符号也是开发者不容易掌握和理解的部分。在这里笔者简单介绍它们的相应用途。
     
      1.#符号的用途一般有三种。
     
      1)访问非根对象属性,例如示例中的#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。实际上,#相当于ActionContext. getContext();#session.msg表达式相当于ActionContext.getContext().getSession(). getAttribute(”msg”) 。
     
      2)用于过滤和投影(projecting)集合,如示例中的persons.{?#this.age>20}。
     
      3)用来构造Map,例如示例中的#{’foo1′:’bar1′, ’foo2′:’bar2′}。
     
      2.%符号
     
      %符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。如下面的代码所示:
     
      构造Map
     
      <s:set name=”foobar” value=”#{’foo1′:’bar1′, ‘foo2′:’bar2′}” />
     
      <p>The value of key “foo1″ is <s:property value=”#foobar['foo1']” /></p>
     
      <p>不使用%:<s:url value=”#foobar['foo1']” /></p>
     
      <p>使用%:<s:url value=”%{#foobar['foo1']}” /></p>
     
      3.$符号
     
      $符号主要有两个方面的用途。
     
      在国际化资源文件中,引用OGNL表达式,例如国际化资源文件中的代码:reg.agerange=国际化资源信息:年龄必须在min同{max}之间。
     
      在Struts 2框架的配置文件中引用OGNL表达式,例如下面的代码片断所示:
     
      <validators>
     
      <field name=”intb”>
     
      <field-validator type=”int”>
     
      <param name=”min”>10</param>
     
      <param name=”max”>100</param>
     
      <message>BAction-test校验:数字必须为min为{max}之间!</message>
     
      </field-validator>
     
      </field>
     
      </validators
     
     
     
     
     
    另一个很容易错误应用的问题
     
    <s:if test="deptType==1" >下属</s:if>如果你的数据库对应的字段类型为整形,可以这样使用;
    <s:if test="deptType=='1'" >下属</s:if>如果你的数据库对应的字段类型为char,可以这样使用;
    <s:if test="deptType=='aa'" >下属</s:if>如果你的数据库对应的字段类型为varchar,并且数据库中的字符串都是多余一个字符的字符串,可以这样使用;
    <s:if test="deptType=="1"" >下属</s:if><s:else>直属</s:else>(测试通过,这样用是最正确的)
     
     
     
     
     
    我遇到的样式选中问题解决方法:
     
    <li>
     
      <a href="/pro/pro!productList.action?proId=${productType.id}" <s:if test="#productType.id == #parameters.productType[0]">class="currt"</s:if>>${productType.typeName}</a>
     
    </li>
    生活赋予我们一种巨大的和无限高贵的礼品,这就是青春:充满着力量,充满着期待志愿,充满着求知和斗争的志向,充满着希望信心和青春。
  • 相关阅读:
    27 Spring Cloud Feign整合Hystrix实现容错处理
    26 Spring Cloud使用Hystrix实现容错处理
    25 Spring Cloud Hystrix缓存与合并请求
    24 Spring Cloud Hystrix资源隔离策略(线程、信号量)
    23 Spring Cloud Hystrix(熔断器)介绍及使用
    22 Spring Cloud Feign的自定义配置及使用
    21 Spring Cloud使用Feign调用服务接口
    20 Spring Cloud Ribbon配置详解
    19 Spring Cloud Ribbon自定义负载均衡策略
    18 Spring Cloud Ribbon负载均衡策略介绍
  • 原文地址:https://www.cnblogs.com/ysq0908/p/4672739.html
Copyright © 2011-2022 走看看