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

运行结果为

ongl 表达式

上一篇:css布局&初始化&基准样式


下一篇:IOS中标签视图和Block