struts2.3.1.2知识点(三)标签和ognl

来源:互联网 发布:程序员的文本编辑器 编辑:程序博客网 时间:2024/05/23 19:32

 说明:将变量强制认为用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()"/>