structs2 投影的介绍

第一部分:代码


//前端
访问属性


//web.xml
<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false">
    <constant name="struts.devMode" value="true">
    <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
    <include file="/com/struts2/ognl/ognl.xml/">   
</include></constant></constant></struts>


//ognl.xml
<struts>
    <package extends="struts-default" name="ognl">
         
            <result>/ognl.jsp</result>
        </action>
         
            <result type="chain">ognl</result>
        </action>
    </package>
</struts>


//类包
//ognl.java
package com.struts2.ognl;
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 com.opensymphony.xwork2.ActionSupport;
public class OgnlAction extends ActionSupport {
    private String password;
    private String username;
 
    private User user;
    private Cat cat;
 
    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));
    }
 
 
    public String execute() {
        return SUCCESS;
    }
 
    public String getPassword() {
        return password;
    }
     
    public String getUsername() {
        return username;
    }
 
 
    public User getUser() {
        return user;
    }
 
 
    public Cat getCat() {
        return cat;
    }
     
    public List<user> getUsers() {
        return users;
    }
    public Map<string, dog=""> getDogMap() {
        return dogMap;
    }
 
 
    public Set<dog> getDogs() {
        return dogs;
    }
 
 
    public String m() {
        return hello;
    }
 
 
    public void setCat(Cat cat) {
        this.cat = cat;
    }
     
    public void setDogMap(Map<string, dog=""> dogMap) {
        this.dogMap = dogMap;
    }
 
    public void setDogs(Set<dog> dogs) {
        this.dogs = dogs;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
 
    public void setUser(User user) {
        this.user = user;
    }
     
    public void setUsername(String username) {
        this.username = username;
    }
 
    public void setUsers(List<user> users) {
        this.users = users;
    }
}
 
//user.java
package com.struts2.ognl;
public class User {
    private int age = 8;
     
    public User() {     
    }
     
    public User(int age) {
        super();
        this.age = age;
    }
 
 
 
 
    public int getAge() {
        return age;
    }
 
 
    public void setAge(int age) {
        this.age = age;
    }
     
    @Override
    public String toString() {
        return user + age;
    }
}</user></dog></string,></dog></string,></user></string,></string,></dog></dog></user></user>


//cat.java
package com.struts2.ognl;
public class Cat {
    private Dog friend;
 
    public Dog getFriend() {
        return friend;
    }
 
    public void setFriend(Dog friend) {
        this.friend = friend;
    }
 
    public String miaomiao() {
        return miaomiao;
    }
}
 
//dog.java
package com.struts2.ognl;
public class Cat {
    private Dog friend;
     
    public Dog getFriend() {
        return friend;
    }
 
    public void setFriend(Dog friend) {
        this.friend = friend;
    }
 
    public String miaomiao() {
        return miaomiao;
    }
}
?
1
//展示
访问值栈中的action的普通属性: username =
访问值栈中对象的普通属性(get set方法): | | | wrong: <%----%>
访问值栈中对象的普通属性(get set方法):
访问值栈中对象的普通方法:
访问值栈中对象的普通方法:
访问值栈中action的普通方法:
访问静态方法:
访问静态属性:
访问Math类的静态方法:
访问普通类的构造方法:
访问List:
访问List中某个元素:
访问List中元素某个属性的集合:
访问List中元素某个属性的集合中的特定值: |
访问Set:
访问Set中某个元素:
访问Map:
访问Map中某个元素: | |
访问Map中所有的key:
访问Map中所有的value:
访问容器的大小: |
投影(过滤):
投影:1}.{age}/>
投影:1}.{age}/>
投影:1}.{age} == null/>
[]:
第二部分:分析


-> 点击之后,根据配置文件里里面的配置,找到文件包含
-> 查找ognl.xml文件


<struts>
        <package extends="struts-default" name="ognl">
             
                <result>/ognl.jsp</result>
            </action>
             
                <result type="chain">ognl</result>
            </action>
        </package>
       </struts>
 


-> 根据xml配置文件里面的action关联的类,构造类对象;
-> 根据ognl.java构造ognl对象;
-> 展示阶段进行取值显示,有几种访问方式需要注意:
-> 访问值栈中属性,值栈中对象的方法,静态方法,静态属性,容器对象;
访问值栈中的action的普通属性
值栈中对象的普通属性
值栈中对象的普通方法
值栈中action的普通方法
静态方法访问方式@类名@方法名


需要在web.xml中设置 value=true>
查看默认设置的方法:/Struts2_1900_OGNL / WebRoot / WEB-INF / lib / struts2-core-2.1.6.jar /default.properties
访问集合
-> 调用方法
?
1
http://localhost:8080/Struts2_1900_OGNL/ognl.action?username=u&password=p&user.age = 19&cat.friend.name =oudy
第三部分;讨论


Object Graph Navigation Language
对象图导航语言


第四部分:有关投影的讨论


投影即过滤功能。
过滤写法:
?
1
 
投影(过滤):
投影:1}.{age}/>
投影:1}.{age}/>
投影:1}.{age} == null/>
以? ^ $ 开头加上过滤条件,和正则表达式不相同;
this表示循环过程中的对象,帮助你做一些循环;


投影(过滤):
表示从从users中取出age=1的那一个,结果是一个集合;


投影(过滤):
表示从从users中取出age=1的第一个,结果是一个;
投影:1}.{age}/>
表示从从users中取出age>1的集合结尾的那一个;
原文地址:https://www.cnblogs.com/lechance/p/4373278.html