• ongl 表达式


    struts.xml简单配置

    <!-- (默认false)设置ognl表达式是否支持静态方法 -->
        <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
        <package name="ognl" namespace="/ognl" extends="struts-default">
            <action name="ognl" class="com.ouc.wkp.action.OgnlAction">
                <result>/ognl.jsp</result>
            </action>
        </package>
    struts.xml

    记得打开

    <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>

    package com.ouc.wkp.action;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    import org.apache.commons.chain.Catalog;
    
    import com.opensymphony.xwork2.ActionSupport;
    import com.ouc.wkp.model.Cat;
    import com.ouc.wkp.model.Dog;
    import com.ouc.wkp.model.User2;
    
    //user.xxx只有传,才会构造,想初始化domain model,可以自己new,也可以传参数值
    //但这时候要有参数为空的构造方法
    //
    public class OgnlAction extends ActionSupport {
        private String password;
        private String username;
        private User2 user;
        private Cat cat;
        private Map<String, Dog> dogMap = new HashMap<String, Dog>();
        private Set<Dog> dogs = new HashSet<Dog>();
        private List<User2> users = new ArrayList<User2>();
    
        public Cat getCat() {
            return cat;
        }
    
        public void setCat(Cat cat) {
            this.cat = cat;
        }
    
        public User2 getUser() {
            return user;
        }
    
        public void setUser(User2 user) {
            this.user = user;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public Map<String, Dog> getDogMap() {
            return dogMap;
        }
    
        public void setDogMap(Map<String, Dog> dogMap) {
            this.dogMap = dogMap;
        }
    
        public Set<Dog> getDogs() {
            return dogs;
        }
    
        public void setDogs(Set<Dog> dogs) {
            this.dogs = dogs;
        }
    
        public List<User2> getUsers() {
            return users;
        }
    
        public void setUsers(List<User2> users) {
            this.users = users;
        }
    
        public OgnlAction() {
            users.add(new User2(1));
            users.add(new User2(2));
            users.add(new User2(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"));
        }
    
        @Override
        public String execute() throws Exception {
            return SUCCESS;
        }
    
        public String m() {
            return "mmmmm";
        }
    }
    OgnlAction.java
    package com.ouc.wkp.model;
    //user.xxx只有传,才会构造,想初始化domain model,可以自己new,也可以传参数值
    //但这时候要有参数为空的构造方法
    public class User2 {
        private int age=8;
        
        
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public User2(){
    //        System.out.println("user constructor");
        }
        
        public User2(int age){
            this.age=age;
        }
        
        @Override
        public String toString() {
            return "user"+age;
        }
    }
    User2.java
    package com.ouc.wkp.model;
    
    public class Cat {
        private Dog friend;
    
        public Dog getFriend() {
            return friend;
        }
    
        public void setFriend(Dog friend) {
            this.friend = friend;
        }
        
        public String miaomiao(){
            return "miaomiao";
        }
        
    //    public Cat(){
    //        
    //    }
    //    
    //    public Cat(Dog friend){
    //        this.friend=friend;
    //    }
    //    
    //    @Override
    //    public String toString() {
    //        return "cat"+friend;
    //    }
    }
    Cat.java
    package com.ouc.wkp.model;
    
    public class Dog {
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        
        public Dog(){
    
        }
        
        public Dog(String name){
            super();
            this.name=name;
        }
        
        @Override
        public String toString() {
            return "dog"+name;
        }
    }
    Dog.java

    然后就是比较核心的ognl.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib uri="/struts-tags" prefix="s"%>
    <%
        String path = request.getContextPath();
        String basePath = request.getScheme() + "://"
                + request.getServerName() + ":" + request.getServerPort()
                + path + "/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'ognl.jsp' starting page</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
        <link rel="stylesheet" type="text/css" href="styles.css">
        -->
    
    </head>
    
    <body>
        <s:debug></s:debug>
        This is ognl.jsp
        <br> 访问值栈中的action的普通属性:username=
        <s:property value="username" />
        <br /> 访问值栈中对象的普通属性(get set 方法)
        <s:property value="user.age" />
        <br /> 访问值栈中对象的普通属性(get set 方法)
        <s:property value="cat.friend.name" />
        <br /> 访问值栈中对象的普通方法
        <s:property value="password.length()" />
        <br /> 访问值栈中对象的普通方法
        <s:property value="cat.miaomiao()" />
        <br /> 访问静态方法:
        <s:property value="@com.ouc.wkp.action.S@s()" />
        <br /> 访问静态属性:
        <s:property value="@com.ouc.wkp.action.S@STR" />
        <br /> 访问Math类的静态方法:
        <s:property value="@@max(2,3)" />
        <br /> 访问普通类的构造方法:
        <s:property value="new com.ouc.wkp.model.User2(10)" />
        <br /> 访问List:
        <s:property value="users" />
        <br /> 访问List中某个元素:
        <s:property value="users[1]" />
        <br /> 访问List中元素某个属性的集合:
        <s:property value="users.{age}" />
        <br /> 访问List中元素某个属性的集合中的特定值:
        <s:property value="users.{age}[0]" />
        <br /> |
        <s:property value="users[0].age" />
        <br /> 访问Set:
        <s:property value="dogs" />
        <br /> 访问Set中某个元素:
        <s:property value="dogs[1]" />
        <br /> 访问Map:
        <s:property value="dogMap" />
        <br /> 访问Map中某个元素:
        <s:property value="dogMap.dog101" />
        <br /> |
        <s:property value="dogMap['dog101']" />
        <br /> |
        <s:property value="dogMap["dog101"]" />
        <br /> 访问Map中所有的key:
        <s:property value="dogMap.keys" />
        <br /> 访问Map中所有的value:
        <s:property value="dogMap.values" />
        <br /> 访问容器的大小:
        <s:property value="dogMap.size()" />
        <br /> |
        <s:property value="users.size" />
        <br /> 投影(过滤):
        <s:property value="users.{?#this.age==1}[0]" />
        <br /> 投影:
        <s:property value="users.{^#this.age>1}.{age}" />
        <br /> 投影:
        <s:property value="users.{$#this.age>1}.{age}" />
        <br /> 投影:
        <s:property value="users.{$#this.age>1}.{age}==null" />
        <br /> []:
        value stack从上往下数<s:property value="[0].username" />
    </body>
    </html>
    ognl.jsp

    输入网址

     http://localhost:8081/maShiBing/ognl/ognl?password=p&username=u&user.age=9&cat.friend.name=fuck

    运行结果为

  • 相关阅读:
    xml读写
    scrollWidth,clientWidth与offsetWidth的区别
    DIV+CSS设计时浏览器兼容性
    访问IIS客户端出现server application error解决方案
    网站局域网内不能访问解决方法之一
    xml学习笔记(一)
    文本编辑器FCKeditor
    业务部门需要IT人员为其提供什么
    程序员与VBA之怪现状
    你的代码完成了吗?(之一)——可用性和易用性
  • 原文地址:https://www.cnblogs.com/wangkaipeng/p/5736899.html
Copyright © 2020-2023  润新知