关于Struts2标签库属性值的%与#号的关系:
1.如果标签的属性值是OGNL表达式,那么无需加上%{}
2.如果标签的属性值是字符串类型,那么在字符串当中凡是出现的%{}都会被解析成OGNL表达式,解析完毕后再与其他的字符串进行拼接构造出最后的字符串值。
3.我们可以再所有的属性值上加%{},这样如果该属性值是OGNL表达式,那么标签处理类就会将%{}忽略掉
实例:
创建一个javaWeb工程,导入struts2相关jar包,配置文件。
action代码如下:
package com.ognl.action;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;
import com.ognl.bean.Cat;
import com.ognl.bean.Person;
import com.opensymphony.xwork2.ActionSupport;
public class OgnlAction extends ActionSupport implements RequestAware,ApplicationAware,SessionAware
{
private String username;
private String password;
private Map<String,Object> requestMap;
private Map<String,Object> sessionMap;
private Map<String,Object> applicationMap;
private List<Person> list = new ArrayList<Person>();
@Override
public void setRequest(Map<String, Object> arg0) {
this.requestMap = arg0;
}
@Override
public void setSession(Map<String, Object> arg0) {
this.sessionMap = arg0;
}
@Override
public void setApplication(Map<String, Object> arg0) {
this.applicationMap = arg0;
}
@Override
public String execute() throws Exception {
requestMap.put("hello", "world");
sessionMap.put("hello", "hello");
applicationMap.put("hello", "hello123");
Cat cat1 = new Cat("cat1",20,"red");
Cat cat2 = new Cat("cat2",30,"blue");
String[] friends1 = {"test1","test2","test3"};
String[] friends2 = {"welcome1","welcome2","welcome3"};
Map<String,String> map1 = new HashMap<String,String>();
Map<String,String> map2 = new HashMap<String,String>();
map1.put("test1", "test1");
map1.put("test2", "test2");
map2.put("hello1", "hello1");
map2.put("hello2", "hello2");
Person person1 = new Person("zhangsan",20,"bejing",friends1,cat1,map1);
Person person2 = new Person("lisi",30,"shichuan",friends2,cat2,map2);
list.add(person1);
list.add(person2);
return SUCCESS;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public List<Person> getList() {
return list;
}
public void setList(List<Person> list) {
this.list = list;
}
}
jsp页面代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
取属性:
<s:property value="username"/><br>
<s:property value="password"/><br>
---------------------------------------<br>
<s:property value="#parameters.username"/>
<s:property value="#parameters.password"/>
<br>
------------------------------------------<br>
request:<s:property value="#request.hello"/>
session:<s:property value="#session.hello"/>
application:<s:property value="#application.hello"/>
<br>
-----------------------------------------<br>
person1:address:<s:property value="list[0].address"/>
person2:age:<s:property value="list[1].age"/>
person1:cat:name:<s:property value="list[0].cat.name"/>
size:<s:property value="list.size"/>
<br>
<s:property value="list[0].friends[0]"/>
<br>
<s:property value="list[1].friends.length"/>
<br>
<s:property value="list[1].map['hello1']"/>
<br>
filtering:
<s:property value="list.{? #this.name.length()>3}.size"/>
<br>
----------------------------------<br>
<s:iterator value="list.{? #this.name.length()>3}">
<s:property value="name"/><br>
<s:property value="cat.color"/><br>
<s:property value="friends.length"/><br>
--------------------------<br>
</s:iterator>
Projection:<br>
<s:iterator value="list.{age}">
<s:property/>
</s:iterator>
</body>
</html>
运行结果如下: