说明:将变量强制认为用ognl表达式取值:%{#u.userName}
“#”取得ActionContext值
“$”用于il8n和struts.xml配置文件
“%”用于将原本的文本属性解析为ognl,对原本是ognl的不起作用
1. struts2 property标签取值
取值:<s:property value="user.userName"/>;
取值为字符串:<s:property value="'userName'"/>(页面显示字符串“userName”);
设定默认值:<s:property value="user.age" default="22"/>(如果user没有age属性则显示结果为22);
取html类型的值:<s:property value="'<div>123</div>'" escape="true"/>
(默认的escape="true",此时是将其显示未字符串“<div>123</div>”,如果设置为escape="false"
则相当于在页面上加了一个div,只显示“123”,也就是用property取html类型的值时是不用转义的);
2.struts2.3 set标签
采用set设置值:<s:set var="age" value="33"/>默认范围为:request和ActionContext
set从request中取值:<s:property value="#request.age"/>
set从AcitonContext中取值:<s:property value="#age"/>
采用set设置值和取值小结:var变量,value设置值,
scope表明值的有效范围<s:set var="age" value="33" scope="session"/>
取值采用"#"+"范围"+"."+"变量":<s:property value="#session.age"/>
3. bean标签赋值取值:
<s:bean name="com.test.model.User" var="u">
<s:param name="userName" value="123"></s:param>
</s:bean>
申明了一个user对象,给对象的userName属性赋值为“123”;
<s:property value="#u.userName"/>
取值。
4. iterator标签
list:
<s:iterator value="userList" var="x" status="ss">
集合元素总和:<s:property value="#ss.count"/>
集合元素下标:<s:property value="#ss.index"/>
集合元素是否奇数:<s:property value="#ss.odd"/>
集合元素是否偶数:<s:property value="#ss.even"/>
集合元素是否第一个元素:<s:property value="#ss.first"/>
集合元素是否最后一个元素:<s:property value="#ss.last"/>
<s:property value="#x.userName"/>
</s:iterator>
map:
<s:iterator value="userMap" var="m">
<s:property value="#m.key"/>
<s:property value="#m.value.userName"/>
</s:iterator>
5. ognl表达式:
5.1值栈中的对象的普通属性:<s:property value="user.userName"/>
5.2值栈中的对象的普通方法:<s:property value="user.userName.length()"/>
public class User {
private String userName;
private String passWord;
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 String findUser(){
User u = new User();
u.userName ="zhang";
u.passWord="123456";
return u.getPassWord();
}
public User findUserObject(){
User u = new User();
u.userName ="zhang";
u.passWord="123456";
return u;
}
}
5.3model类中有两个方法,在jsp页面上可以直接使用下面方式使用该方法:
<s:property value="user.findUser()"/>
<s:property value="user.findUserObject().userName"/>
5.4访问action中的普通方法:
action中有这么一个方法
public String findUserName(){
User u = new User();
return u.findUser();
}
<s:property value="findUserName()"/>
5.5访问静态方法和属性:"@"+"包名"+"."+"类名@变量或方法名"
注意:静态方法要在struts.xml中配置,静态属性不需要
<!-- 允许jsp页面通过ognl表达式直接调用静态方法 -->
<constant name="struts.ognl.allowStaticMethodAccess" value="true" />
public class OGNLTest {
public static int PAGE_SIZE=10;
public static String pageSize(){
String page = String.valueOf(PAGE_SIZE);
return page;
}
}
<s:property value="@com.test.util.OGNLTest@PAGE_SIZE"/>
<s:property value="@com.test.util.OGNLTest@pageSize()"/>
5.6 访问Math类的静态方法,只有该类是可以这样访问:
<s:property value="@@max(2,11)"/>
5.7 访问普通类的构造方法:直接new
(当然必须该类有这样的构造方法):
<s:property value="new com.test.model.User('zhangsan','123456789').userName"/>
5.8 访问list集合(map与其相同如4. iterator标签)
访问list:<s:property value="userList"/>
访问List中的元素:<s:property value="userList[0].userName"/>
访问list元素中属性的集合:<s:property value="userList.{userName}[0]"/>
访问容器的大小:<s:property value="userList.size()"/>