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>