初识Struts2_OGNL表达式

一、配置文件

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 
 6 <struts>
 7     <!-- 启用开发者模式,当修改struts配置文件时不用重启服务器 -->
 8     <constant name="struts.devMode" value="true" />
 9     <!-- 要访问静态方法,一定要把这项设置为true -->
10     <constant name="struts.ognl.allowStaticMethodAccess" value="true" ></constant>
11     <!-- 
12         include的意思 是:
13         引用default.xml
14      -->
15     <package name="default" namespace="/" extends="struts-default">
16         <action name="user" class="cn.su.action.UserAction">
17             <result>/ognl.jsp</result>
18         </action>
19     </package>
20     
21 </struts>

 

二、Action

  Action中用到的User对象

  

 1 package cn.su.domain;
 2 
 3 public class User {
 4     private String name;
 5     public static int age = 18;
 6     public User(){}
 7     public User(String name){
 8         this.name = name;
 9     }
10     public String getName() {
11         return name;
12     }
13     
14     public void setName(String name) {
15         this.name = name;
16     }
17     public static String sayHello(){
18         return "user say hello";
19     }
20 }

 

  Action

 1 package cn.su.action;
 2 
 3 import java.util.ArrayList;
 4 import java.util.HashMap;
 5 import java.util.HashSet;
 6 import java.util.List;
 7 import java.util.Map;
 8 import java.util.Set;
 9 
10 import cn.su.domain.User;
11 
12 import com.opensymphony.xwork2.ActionSupport;
13 
14 public class UserAction extends ActionSupport {
15     private String username;
16     private User user;
17     private List<User> list = new ArrayList<User>();
18     private Set<User> set = new HashSet<User>();
19     private Map<String,User> map = new HashMap<String, User>();
20     
21     /*在构造方法中初始化 list,set,map*/
22     public UserAction(){
23         list.add(new User("l1"));
24         list.add(new User("l2"));
25         list.add(new User("l3"));
26         
27         set.add(new User("s1"));
28         set.add(new User("s2"));
29         set.add(new User("s3"));
30         
31         map.put("mk1",new User("mv1"));
32         map.put("mk2",new User("mv2"));
33         map.put("mk3",new User("mv3"));
34     }
35     public String execute(){
36         return SUCCESS;
37     }
38     public String hello(){
39         return "hello";
40     }
41     public String getUsername() {
42         return username;
43     }
44 
45     public void setUsername(String username) {
46         this.username = username;
47     }
48 
49     public User getUser() {
50         return user;
51     }
52 
53     public void setUser(User user) {
54         this.user = user;
55     }
56     public List<User> getList() {
57         return list;
58     }
59     public void setList(List<User> list) {
60         this.list = list;
61     }
62     public Set<User> getSet() {
63         return set;
64     }
65     public void setSet(Set<User> set) {
66         this.set = set;
67     }
68     public Map<String, User> getMap() {
69         return map;
70     }
71     public void setMap(Map<String, User> map) {
72         this.map = map;
73     }
74     
75 }

 

三、jsp页面

  1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2 <%@ taglib uri="/struts-tags" prefix="s" %>
  3 <%
  4 String path = request.getContextPath();
  5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  6 %>
  7 
  8 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  9 <html>
 10   <head>
 11     <base href="<%=basePath%>">
 12     
 13     <title>My JSP 'index.jsp' starting page</title>
 14     <meta http-equiv="pragma" content="no-cache">
 15     <meta http-equiv="cache-control" content="no-cache">
 16     <meta http-equiv="expires" content="0">    
 17     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 18     <meta http-equiv="description" content="This is my page">
 19     <!--
 20     <link rel="stylesheet" type="text/css" href="styles.css">
 21     -->
 22   </head>
 23   
 24   <body>
 25           <ul><!-- 访问的url:http://localhost:8080/Struts2_OGNL/user?username=Tom&user.name=Jack -->
 26               <li>访问值栈中的action的普通属性: username = <s:property value="username"/> </li>
 27               <!-- 前台传递参数 user.name=Jack
 28                   user一定要有无参的构造方法,才能正确被struts创建
 29                   当前台没有传递任何跟user有关的参数时
 30                   struts不会创建user对象,即user=null
 31                -->
 32             <li>访问值栈中对象的普通属性(get set方法):<s:property value="user.name"/>|<s:property value="user['name']"/>| <s:property value="user[\"name\"]"/>| wrong: <%--<s:property value="user[age]"/>--%></li>
 33             <li>访问值栈中对象的普通方法:<s:property value="username.length()"/></li>
 34             <li>访问值栈中action的普通方法:<s:property value="hello()"/></li>
 35             <hr />
 36             <!-- 静态方法和属性一定要是public的才可以访问
 37                 访问静态方法还需配置
 38                     常量 struts.ognl.allowStaticMethodAccess为true
 39              -->
 40             <li>访问静态方法:<s:property value="@cn.su.domain.User@sayHello()"/>  </li>
 41             <li>访问静态属性:<s:property value="@cn.su.domain.User@age"/></li>
 42             <li>访问Math类的静态方法:<s:property value="@@max(1,2)"/></li>
 43             <hr />
 44             <li>访问普通类的构造方法:<s:property value="new cn.su.domain.User()"/></li>
 45             <hr />
 46             <li>访问List:<s:property value="list"/></li>
 47             <li>访问List中某个元素:<s:property value="list[0]"/></li>
 48             <li>访问List中元素某个属性的集合:<s:property value="list.{name}"/></li>
 49             <li>访问List中元素某个属性的集合中的特定值:<s:property value="list.{name}[0]"/>|<s:property value="list[0].name"/> </li>
 50             <li>访问Set:<s:property value="set"/></li>
 51             <!-- 不能通过set[0]来访问set中的元素,因为set是无序的,可能每次取出的set[0]都不是同一个元素 -->
 52             <li>访问Set中某个元素:<s:property value="set[0]"/></li>
 53             <li>访问Map:<s:property value="map"/></li>
 54             <li>访问Map中某个元素: <s:property value="map.mk1"/>|<s:property value="map['mk1']"/>  |<s:property value="map[\"mk1\"]"/> </li>
 55             <li>访问Map中所有的key:<s:property value="map.keys"/></li>
 56             <li>访问Map中所有的value:<s:property value="map.values"/></li>
 57             <li>访问容器的大小:<s:property value="map.size()"/> |<s:property value="map.size"/>  </li>
 58             <hr />
 59             <!-- 相当于对list进行遍历,取出name='s1'的元素 -->
 60             <li>投影(过滤):<s:property value="list.{?#this.name='s1'}[0]"/></li>
 61             <!-- 取出list集合中name='s1'的第一个元素 -->
 62             <li>投影:<s:property value="list.{^#this.name=='s1'}.{name}"/></li>
 63             <!-- 取出list集合中name='s1'的最后个元素 -->
 64             <li>投影:<s:property value="list.{$#this.name=='s1'}.{name}"/></li>
 65             <!-- 
 66                 注意:
 67                     <s:property value="list.{$#this.name='s1'}.{name}"/>
 68                                                         ^
 69                                                         |
 70                                                         |
 71                     这里少了个等号,就相当给每个user.name赋值
 72              -->
 73             <li>投影:<s:property value="list.{?#this.name=='s4'}.{name}==null"/></li>
 74             <hr />
 75             <!-- [0]取出的是值栈中的所有元素 -->
 76             <li>[]:<s:property value="[0].username"/></li>
 77             <!-- [1]取出的是值栈中的下标为一的元素 
 78                 也就是说不能够单个的取出值栈中的第一个元素
 79             -->
 80             <li>[]:<s:property value="[1]"/></li>
 81        
114         </ul>
115         <s:debug></s:debug>
116   </body>
117 </html>

 

posted @ 2014-04-17 18:27  XIAOHEI丨  阅读(118)  评论(0编辑  收藏  举报