OGNL中那些# % $ 这三个符号怎么用?适用于什么场合?网上搜了一堆大同小异的说法,看不太明白,谁能说明白点,谢谢了

解决方案 »

  1.   

    #一般用于页面间传参
    $一般用于取得后台action或model对应的值
    %s2标签里会用到
      

  2.   

    关于#、%的使用
    在Struts2的标签中,可以直接访问Valuestack中的对象,对于Valuestack中的根对象,可以不需要加#号直接访问(如 action实例的属性),而对于非根对象,则需要通过加#来访问(如Valuestack中存储的Session、Application等对象)。
    而对于%的使用,主要是用来包装需要计算的表达式。举一个应用的实例吧:
    有时候需要通过Session来携带一些信息到前台,如一些类似“修改成功”的提示信息,当这些信息在前台被使用之后,为了不让这些信息影响到其他页面,需要立即将Session中的相应信息清除。此时,可以使用<s:property value="%{removeSession('attrId')}" />来将Session中attrId的值删除(注:removeSession()是action对象中定义的一个方法)。在struts2中action传递给jsp中的数据是保存在OgnlValueStack中的,所以在jsp页面中如果想利用脚本而不是sturts标签获取传入值的话,尽量使用OgnlValueStack的值获得,例如:
    <%...OgnlValueStack stack = (OgnlValueStack) request.getAttribute("struts.valueStack");
    Article article = (Article)(stack.findValue("article"));%>
      

  3.   

    1.%操作符:
       1>.取得国际化信息:
          <s:property value="%{getText('资源key')}" />
       2>.页面取值用:
          <s:property value="userName" />等于<s:property value="%{userName}" />2.$操作符:
       1>.xml校验读取国际化信息:
          <message>${getText('资源文件key')}</message>
       2>.配置文件传递参数:
          <action name="A" method="doTest" class="TestAction">
              <result type="redirectAction">
                   <param name="actionName">B</param>
                   <param name="bUserName">${aUserName}</param>
              </result>
          </action>
       3>.集合过滤:
          list.{$#this.age > 10}3.#操作符:
       1>.非根对象访问:
          <s:property value="#request.userName" />
       2>.构造Map:
          <s:select name="sex" list="#{'1':'男', '2':'女'}"/>
       3>.集合过滤:
          list.{?#this.age > 10}
       4>.Action范围数据访问:
          <s:set name="age" value="30" />
          <s:property value="#age" />
       5>.<s:iterator />中应用
          <s:iterator value="list" status="sts">
    <s:property value="#sts.count" />
          </s:iterator>