(6)OGNL--1:访问值栈中的普通属性、对象属性、普通方法、静态方法、自写set、map、list

OgnlAction

//Dog 有属性name
//Cat 有属性ptivate Dog friend
public class OgnlAction extends ActionSupport{

    //private User user;
    private User user=new User();//手动初始化,User必须含有带空参的构造方法
    //user.xxx只有传,才会构造,想要初始化domain model,可以自己new,也可以传参数

    private List<User> users=new ArrayList<User>();
    private Set<Dog> dogs=new HashSet<Dog>();
    private Map<String,Dog> dogMap=new HashMap<String,Dog>();

    public OgnlAction(){
        //对集合属性,初始化
        users.add(new User(1));
        users.add(new User(2));
        users.add(new User(3));

        dogs.add(new Dog("dog1"));
        dogs.add(new Dog("dog2"));
        dogs.add(new Dog("dog3"));

        dogMap.put("dog100", new Dog("dog100"));
        dogMap.put("dog101", new Dog("dog101"));
        dogMap.put("dog102", new Dog("dog102"));
    }

    //访问值栈中的action普通属性
    private String password;
    private String username;



    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        return "success";
    }

    public String m(){
        return "hello";
    }



}

index.jsp:传数据页面

 <body>
    访问普通属性:<a href="ognl/ognl?username=u&password=10086">ognl</a><br/>
    在OgnlAction中不初始化user 要使得值栈中user有值,应该在前端传值给它:<a href="ognl/ognl?user.age=10">ognl</a><br/>
    在OgnlAction中初始化user,访问值栈中对象的普通属性<a href="ognl/ognl?user.age">ognl</a><br/>
   在OgnlAction中,访问值栈中cat--dog<a href="ognl/ognl?cat.friend.name=dudu">ognl</a><br/> 
  </body>

ognl.jsp页面



     <ol> 
       <li>访问值栈中的action普通属性:username=<s:property value="username" /></li>
      <li>在OgnlAction中不初始化user,访问值栈中对象的普通属性(get、set方法)<s:property value="user.age"/>|<s:property value="user['age']" /><!-- 在OgnlAction中不初始化user
        在显示的debug中user=null,因为前台没有传值 -->
      </li>

         <li>在OgnlAction中手动初始化user,访问值栈中对象的普通属性(get、set方法)<s:property value="user.age"/>|<s:property value="user['age']" /><!-- 在OgnlAction中初始化user
        在显示的debug中user不为空,前台可以得到其值 -->
         </li>
        <li>访问值栈中对象的普通属性<s:property value="cat.friend.name"/></li>
     <!--    <li>访问值栈中的普通方法:<s:property value="password.length()"/></li>   --> 
        <li>访问值栈中的对象的普通方法:<s:property value="cat.miaomiao()"/></li>
        <li>访问值栈中的普通方法:<s:property value="m()"/></li><!-- 这是Action中的方法 -->
        <s:debug></s:debug>
        <!-- -------------------------------------------------------------------- -->
        <li>访问静态方法:<s:property value="@com.ognl.S@s()"/></li>
        <li>访问静态方法:<s:property value="@com.ognl.S@STR"/></li>
         <li>访问Math类中的静态方法:<s:property value="@@max(2,3)"/></li><!-- 只有这一个类这样用 -->

         <!-- ------------------------------------------------------------------------- -->
          <li>访问普通类的构造方法:<s:property value="new com.ognl.User(8)"/></li><!-- 在页面显示是user8,这是因为重新了 toString方法 -->
         <li>访问list:<s:property value="users" /></li><!-- [user1, user2, user3] -->
         <li>访问list中元素某个属性的集合<s:property value="users.{age}" /></li><!-- [1, 2, 3] -->
         <li>访问list中元素某个属性的集合中的特定值<s:property value="users.{age}[0]" /></li>

          <!-- ------------------------------------------------------------------------- -->
          <li>访问set:<s:property value="dogs" /></li>
          <li>访问set中的某个元素:<s:property value="dogs[1]"/></li><!-- 在ognl中,若不符合语法,不报错,但是不显示。set元素无序,不应该用下标取 -->
          <!-- ------------------------------------------------------------------------- -->
          <li>访问map:<s:property value="dogMap" /></li>
          <li>访问map中的某个元素<s:property value="dogMap.dog101"  /></li>
          <li>访问map中的所有key<s:property value="dogMap.keys"/>
          <li>访问map中所有的value<s:property value="dogMap.values"/>
          <li>访问容器的大小<s:property value="dogMap.size()" /></li>
          <!-- ------------------------------------------------------------------------- -->
          <li>投影(过滤):<s:property value="users.{?#this.age==1}" /></li><!-- 是个集合,因为user.age=1的对象可以有多个 -->
          <li>投影(过滤):<s:property value="users.{?#this.age==1}[0]" /></li><!-- 取的是集合的第一个元素 -->
          <li>投影(过滤):<s:property value="users.{^#this.age>1}.{age}" /></li>
          <li>投影(过滤):<s:property value="users.{$#this.age>1}.{age}" /></li>
          <li>投影(过滤):<s:property value="users.{^#this.age>1}.{age}==null" /></li><!-- 判断是否有user属性age>1的-->

           <!-- ------------------------------------------------------------------------- -->
           <li>[]:<s:property value="[0]"/><li><!-- 要用http://localhost:8080/struct_OGNL/ognl/test -->
     </ol>
     <s:debug></s:debug>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值