OGNL的4种符号用法

OGNL的4种符号用法

1)#  (表示总的数据中心,用来获取域对象的值 如:request域对象:<s:properties value="#.request.username")/> ;
 >>访问ActionContext数据中心和值栈

   Action与ValueStack是一一对应的,当Action创建后,会创建对应的ValueStack,然后将该ValueStack
          绑定到request域对象中,因此,可能在转发的情况下,才能取得ValueStack中的数据。
          ValueStack的内部结构图,参见<<>> 
  访问获取值栈的代码如下:
  //获取值栈
  ValueStack vs=ActionContext.getContext().getValueStack();
  //向值栈中绑定值
  vs.set("role","管理员");
   
          struts2的数据中心-----ActionContext/ServletActionContext
   Action的数据中心------ValueStack,因为Action中的所有数据都位于值栈中
          attr.username按如下顺序查询:(attr作用是查询对象的)
   page->request->valuestack(默认)->session->application,找到即止,找不到返回空串,面不是null
 >>访问集合List
   A)集合的投影:userList.{username}
   <%
    List<User> list=new ArrayList<User>();
     list.add(new User("张三","123456",23));
     list.add(new User("王五","124456",24));
     list.add(new User("李四","123455",25));
     list.add(new User("小六","153456",26));
     pageContext.setAttribute("list",list);
    %>
    <table align="center" border="2">
    <caption><h4>用户列表1</h4></caption>
   <s:iterator var="username" value="#attr.list.{?#this.age>=25}">
    <tr>
    <td>
     <s:property value="username" /> <br/>
     </td>
    </tr>
   </s:iterator>
                   </table>
   B)集合的过滤:userList.{?#this.age>22}或userList.{^#this.age>22}或
                       userList.{$#this.age>22}.{?#this.gender=="男"}

         ?#表示所有对象  
         ^#表示第一个对象  
         $#表示最后一个对象 
   this表示当前迭代的这个对象 
          C)集合的投影和过滤:userList.{?#this.age>22}[0]
         [0]表示符合条件的第一个对象 
         [1]表示符合条件的第二个对象 

 >>访问集合Map:#{'male':'[男]','female':'[女]'}这种方式常用在给radio 或select,checkbox等标签赋值上
     Action中的Map属性:
  private Map map;
  public Map getMap(){
   return map; 
  }
  public String excute(){
   Map<String,String> map=new HashMap<String,String>();
   map.put("male","男");

   map.put("femal","女");
  ActionContext.getContext().getValueStack().set("map",map);
   return "success";
  }
   在jsp中的代码
      //从值栈中到得map数据  这里是从键与值来取得相应的键值
       <s:iterator value="map">    或<s:iterator var="entry" value="map"/>
  <s:property value="key"/>    或<s:property value="#entry.key/> //这里的#是因为需要把entry看作一个

javaBean来看
  <s:property value="value"/>  或<s:property value="#entry.key"/>
            </s:iterator> 

 #的作法
      A)访问非ValueStack中的数据
      B)访问JavaBean的某个属性    

   (2)% 符号的用途是在标签的属性值被理解为字符串类型时,告诉执行环境%{}里的是OGNL表达式。
         %{}:
  >><s:textfield label="%{usernameTIP变量}" name="username"/>
  >><s:textfield label="%{'usernameTIP'常量}" name="username"/>
   (3)${}不是EL:
  >><field-validator type="double">
  <param name="minInclusive">4000</param>
  <param name=" maxInclusive">6000</param>
  <message>薪水必须介于${minInclusive}到${maxInclusive}之间</message>
    </field-validator> 
         >><param name="contentDisposition">attachment;filename=${filename}</param> 
   (4) 访问集合List或{}
         >>value='{"AbA","BbB","CbC","DbD"}'
         >><s:property value="stringList.isEmpty"/>
         >><s:property value="stringList.size"/>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值