jsp:
<ol>
<li>访问值栈中的action的普通属性:<s:property value="name" /></li>
<li>访问值栈中PO.User里的普通属性(get set方法):<s:property value="user.name" /></li>
<li>访问值栈中cat里的dog里的属性(get set方法): <s:property value="cat.friend.name" /></li>
<li>访问值栈中action的普通方法:<s:property value="haha()" /></li>
<li>访问值栈中字段的普通方法:<s:property value="name.length()" /></li>
<li>访问值栈中cat里的普通方法:<s:property value="cat.call()" /></li>
<hr />
<li>访问静态方法:<s:property value="@JingTai@jingtai()" /></li>
<li>访问静态属性:<s:property value="@JingTai@ziduan" /></li>
<li>访问Math类的静态方法:<s:property value="@@max(2,3)" /></li>
<hr />
<li>访问普通类的构造方法:<s:property value="new User('jjjj')" /></li>
<hr />
<li>访问List:<s:property value="usersList" /></li>
<li>访问List中某个元素:<s:property value="usersList[0]" /></li>
<li>访问List中元素某个属性的集合:<s:property value="usersList.{name}" /></li>
<li>访问List中元素某个属性的集合中的特定值:<s:property value="usersList.{name}[0]" /></li>
<li>访问Set:<s:property value="usersSet" /></li>
<li>访问Set中某个元素:<s:property value="usersSet[1]" />没有值是因为set是没有顺序的</li>
<li>访问Map:<s:property value="usersMap" /></li>
<li>访问Map中某个元素:<s:property value="usersMap.user1" /></li>
<li>访问Map中所有的key:<s:property value="usersMap.keys" /></li>
<li>访问Map中所有的value:<s:property value="usersMap.values" /></li>
<li>访问list的大小:<s:property value="usersList.size()" /></li>
<li>访问set的大小:<s:property value="usersSet.size()" /></li>
<li>访问map的大小:<s:property value="usersMap.size()" /></li>
<hr />
<li>投影(过滤):<s:property value="usersList.{?#this.name=='Lista'}[0]" /></li>
<hr />
<li>[]:当debug里有两个action的时候,从action里取值<s:property value="[0].name" /></li>
</ol>
action:
public class Ognl extends ActionSupport {
private String name="uuuuuuuuuuuu";
private User user;
private Cat cat;
private List<User> usersList=new ArrayList<User>();
private Set<User> usersSet=new HashSet<User>();
private Map<String,User>usersMap=new HashMap<String,User>();
public Ognl(){
usersList.add(new User("Lista"));
usersList.add(new User("Listb"));
usersList.add(new User("Listc"));
usersSet.add(new User("Seta"));
usersSet.add(new User("Setb"));
usersSet.add(new User("Setc"));
usersMap.put("user1", new User("Mapa"));
usersMap.put("user2", new User("Mapb"));
usersMap.put("user3", new User("Mapc"));
}
public Cat getCat() {
return cat;
}
public void setCat(Cat cat) {
this.cat = cat;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String execute(){
return SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String haha(){
return "haha";
}
public List<User> getUsersList() {
return usersList;
}
public void setUsersList(List<User> usersList) {
this.usersList = usersList;
}
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;
}
}
关联的PO:
public class User {
private String name;
private String pass;
public User(){
}
public User (String name){
super();
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "user"+name;
}
}
public class Cat {
private Dog friend;
public Dog getFriend() {
return friend;
}
public void setFriend(Dog friend) {
this.friend = friend;
}
public String call(){
return "miaomiao";
}
}
public class Dog {
private String name;
public Dog(){
}
public Dog(String name){
super();
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Dog"+name;
}
}
public class TwoAction extends ActionSupport{
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
struts.xml:
<action name="ognl" class="Ognl">
<result>/Ognl.jsp</result>
</action>
<action name="twoAction" class="TwoAction">
<result type="chain">ognl</result>
</action>
如果使用静态方法的话,必须在配置文件里添加
<constant name="struts.ognl.allowStaticMethodAccess" value="true" />