`
wangrl
  • 浏览: 152349 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Struts2中使用OGNL表达式投影(过滤)集合

阅读更多
2010-01-31 20:42

1.集合的投影(过滤)有以下三种方式:
a.“?#”:投影(过滤)所有符合条件的集合,如:users.{?#this.age > 19};
b.“^#”:投影(过滤)第一个符合条件的元素,如:users.{^#this.age > 19};
c.“$#”:投影(过滤)最后一个符合条件的元素,如:users.{$#this.age > 19} 。
2.“this”表示集合中的元素;
3.投影(过滤)操作返回的是一个集合,可以使用索引取得集合中指定的元素,如:users.{?#this.age > 19}[0]。

实例:

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="
http://java.sun.com/xml/ns/javaee "
xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance "
xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd ">
<welcome-file-list>
<welcome-file>hello.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>


struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"
http://struts.apache.org/dtds/struts-2.0.dtd ">

<struts>
<!--
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />

<include file="example.xml"/>

 

<package name="default" namespace="/" extends="struts-default">
    <default-action-ref name="index" />
    <action name="index">
        <result type="redirectAction">
            <param name="actionName">HelloWorld</param>
            <param name="namespace">/example</param>
        </result>
    </action>
</package>
-->

<!-- Add packages here -->
<constant name="struts.devMode" value="true" />
<constant name="struts.i18n.encoding" value="GBK" />
<package name="user" namespace="/" extends="struts-default">
    <action name="user" class="cn.edu.ahau.mgc.struts2.action.UserAction">
        <result>/addSuccess.jsp</result>
    </action>
</package>
</struts>

 


UserAction.java:

package cn.edu.ahau.mgc.struts2.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 cn.edu.ahau.mgc.struts2.model.User;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {

private String userName;

private User user;

private List<User> users = new ArrayList<User>();

private Set<User> usersSet = new HashSet<User>();

private Map<String, User> usersMap = new HashMap<String, User>();

public UserAction() {
    users.add(new User("1", 19));
    users.add(new User("2", 20));
    users.add(new User("3", 21));

    usersSet.add(new User("1", 19));
    usersSet.add(new User("2", 20));
    usersSet.add(new User("3", 21));

    usersMap.put("u1", new User("1", 19));
    usersMap.put("u2", new User("2", 20));
    usersMap.put("u3", new User("3", 21));
}

public String execute() {
    return SUCCESS;
}

public String getUserName() {
    return this.userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

public User getUser() {
    return user;
}

public void setUser(User user) {
    this.user = user;
}

public String test() {
    return "Action Method";
}

public List<User> getUsers() {
    return users;
}

public void setUsers(List<User> users) {
    this.users = users;
}

public Set<User> getUsersSet() {
    return usersSet;
}

public void setUsersSet(Set<User> usersSet) {
    this.usersSet = usersSet;
}

public Map<String, User> getUsersMap() {
    return usersMap;
}

public void setUsersMap(Map<String, User> usersMap) {
    this.usersMap = usersMap;
}

}


User.java:

package cn.edu.ahau.mgc.struts2.model;

public class User {

private String userName;

private int age;

private User firend;

public User() {
   
}

public User(String userName, int age) {
    super();
    this.userName = userName;
    this.age = age;
}

public User getFirend() {
    return firend;
}

public void setFirend(User firend) {
    this.firend = firend;
}

public String getUserName() {
    return this.userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

@Override
public String toString() {
    return "User(" + this.userName + ", " + this.age + ")";
}

public String hello() {
    return "Hello World!";
}

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}

}

 


index.jsp:

<%@ page language="java" pageEncoding="GB18030"%>
<%
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>ResultParam</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>
<a href="user">user</a><br />
</body>
</html>

 


addSuccess.jsp:

<%@ page language="java" pageEncoding="GB18030"%>
<%@ 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>Dynamic</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>
User Add Success! <br />
投影(过滤)所有符合条件的集合:users.{?#this.age > 19} --> <s:property value="users.{?#this.age > 19}" /><br />
投影(过滤)所有符合条件的集合中指定的元素:users.{?#this.age > 19}[0] --> <s:property value="users.{?#this.age > 19}[0]" /><br />
投影(过滤)第一个符合条件的元素:users.{^#this.age > 19} --> <s:property value="users.{^#this.age > 19}" /><br />
投影(过滤)最后一个符合条件的元素:users.{$#this.age > 19} --> <s:property value="users.{$#this.age > 19}" /><br />
<s:debug></s:debug>
</body>
</html>

分享到:
评论

相关推荐

    Struts2 通过ognl表达式实现投影

    在 Struts2 中,OGNL 表达式可以用于实现投影,即根据特定的条件来过滤数据。例如,在上述示例代码中,我们使用 OGNL 表达式来实现投影,过滤出年龄大于 1 的用户。OGNL 表达式可以写在 Struts2 的配置文件 struts....

    struts2中的ognl

    - 在Struts2中,使用`#`符号可以访问特定的数据上下文,如`request`、`parameters`、`session`和`application`。例如,`#request`代表请求范围内的变量,`#session`则表示session范围内的变量。 - 当访问根对象...

    OGNL符号的使用

    OGNL 符号的使用 OGNL(Object-Graph Navigation Language)是一...OGNL 表达式在 Struts2 中的使用非常广泛,开发者需要充分了解“%”、“#”、“$”这三个符号的使用规则,以便更好地使用 OGNL 表达式提高开发效率。

    很全面的struts2_ognl总结

    OGNL(Object-Graph Navigation Language)是一种基于 Java 的表达式语言,Struts2 框架中使用 OGNL 来访问和操作 ValueStack 中的对象。在 Struts2 中,OGNL 是一个强大的工具,允许开发者访问和操作 ValueStack 中...

    教案第五章struts2的标签库.pdf

    OGNL 表达式语言中使用了多种符号,包括 #、% 和 $ 符号。# 符号用于访问非根对象属性、过滤和投影集合、构造 Map 和 List 等。% 符号用于计算 OGNL 表达式的值。$ 符号用于在国际化资源文件中引用 OGNL 表达式和在 ...

    OGNL表达式基本语法与用法详解

    * 在Struts 2框架的配置文件中引用OGNL表达式,例如下面的代码片断所示: &lt;param name="min"&gt;10 &lt;param name="max"&gt;100 &lt;message&gt;BAction-test校验:数字必须为${min}为${max}之间! 二、OGNL常用...

    第五章struts2的标签库.pdf

    与 Struts 1 相比,Struts 2 的标签库使用 OGNL 表达式作为基础,提供了更强大的对象和集合访问功能。 Struts 2 的标签库将所有标签统一到了一个标签库下,简化了用户对标签库的使用。同时,Struts 2 的标签库还...

    Java实训教程 Java软件开发实战 Java开发框架介绍 struts2_4_OGNL 共71页.pptx

    - **标签库的使用**:Struts2 提供了一系列基于 OGNL 的标签,这些标签可以帮助开发者更方便地在视图层中使用 OGNL。 #### 六、OGNL 的高级特性 除了基本的属性访问和方法调用之外,OGNL 还支持一些高级特性,比如...

    OGNL中的#、%和$符号用法说明

    它在许多Java应用框架中得到了广泛应用,尤其是在Struts2中作为默认的表达式语言。OGNL中的`#`、`%`和`$`符号各有其独特的功能和应用场景,对于理解和熟练使用这些符号至关重要。 #### #符号的用途 1. **访问根...

    struts2_ognl基本用法.doc

    在Struts2中,OGNL主要用于访问值栈中的数据,包括Action实例以及它所包含的对象属性。 **1. 访问Action的普通属性** ```html ``` 上述代码展示了如何通过`&lt;s:property&gt;`标签访问值栈中Action实例的一个属性...

    OGNL使用小结

    总的来说,OGNL是Struts 2中非常重要的组件,它提供了强大的表达式能力,能够方便地处理对象图的导航和数据操作。理解并熟练运用OGNL的这些特性,可以极大地提高开发效率,简化Struts 2应用中的数据绑定和逻辑控制。

    重要知识ognl+标签.pdf

    3. **在Struts2中的使用**:Struts2标签通常与OGNL结合使用,例如`&lt;s:property value="xx" /&gt;`标签用于显示或设置值,这里的`xx`就是OGNL表达式。 4. **特殊符号的使用**: - **“#”符号**:主要用于访问上下文和...

    STRUTS2标签中符号_,$,%的用法示例.doc

    - **计算OGNL表达式值**:当需要在字符串上下文中使用OGNL表达式时,`%`符号就派上用场了。例如,`['foo1']}"/`,这里的`%{}`告诉STRUTS2计算`#foobar['foo1']`的值,并将其作为URL的一部分。 3. `$` 符号: - **...

    struts2 井号,星号,百分号的含义和使用举例.doc

    在Struts2中,井号(#)、星号(*)和百分号(%)在OGNL表达式中扮演着不同的角色。 首先,井号(#)主要与OGNL上下文和Action上下文关联。在Struts2中,#被用来访问OGNL上下文中的对象,这包括ActionContext,它...

    #和$的区别

    ### Struts2中#与$的区别及OGNL表达式的运用 #### 一、OGNL概述与Struts2中的角色 **OGNL**(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取或设置Java对象图中的属性。在Struts2框架中,OGNL...

    ognl图形导航语言

    在使用OGNL表达式时,尤其是在Struts2的标签中,需要特别注意`#`、`%`这两个符号的使用。`#`符号有三个主要用途: 1. 访问非根对象,如OGNL上下文和Action上下文,`#`常用于访问ActionContext中的各种上下文属性。 ...

    OGNL - 功能强大的表达式语言

    例如,在Struts2框架中,不恰当的使用可能导致代码注入攻击。因此,开发者需要确保在处理用户输入时进行严格的过滤和转义,或者使用安全的OGNL上下文(如Spring MVC中的`@Validated`注解)。 **使用OGNL工具** ...

    马士兵Struts2笔记2013

    Action中的属性会被放入ValueStack,从而可以直接在JSP中通过OGNL表达式访问。 8. **ValueStack Debug和Contents** 为了调试目的,可以开启Struts2的值栈调试功能,查看栈中的内容,帮助开发者了解当前请求的状态...

    ognl+标签知识点.pdf

    在Struts2中,OGNL作为默认的表达式语言,因为它提供了许多其他语言不具备的功能,例如对对象方法的直接调用、静态方法和属性的访问、赋值操作以及对集合的便捷操作。 1. **对象方法调用**:OGNL允许直接通过表达式...

    struts2學習筆記

    Struts2提供了简单的数据验证机制,可以在Action类中使用注解或XML配置进行字段级别的验证。此外,还可以自定义验证逻辑,实现业务规则的复杂验证。 ### Struts ValueStack(值栈) ValueStack是Struts2的核心概念...

Global site tag (gtag.js) - Google Analytics