ognl表达式中%的作用

字体大小: 中小 标准 ->行高大小: 标准
===TestAction.java=== 
Java代码  收藏代码
  1. public class TestAction extends ActionSupport  
  2. {  
  3.         private String name = "hello struts2";  
  4.           
  5.         public String getName(){return this.name;}  
  6.           
  7.         public String execute() throws Exception  
  8.         {                  
  9.                 return SUCCESS;  
  10.         }  
  11. }  


访问testAction时,跳转到print.jsp 
===print.jsp=== 
Html代码  收藏代码
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%@ taglib prefix="s" uri="/struts-tags"%>  
  3.   
  4. <html>  
  5.     <body>  
  6.         name值:<s:property value="name" /><br>  
  7.         name值:<s:textfield value="name" /><br>  
  8.         name值:<s:textfield value="%{name}" />  
  9.   </body>  
  10. </html>  




我直接去访问testAction,然后看到页面输出 
name值:hello struts2 
name值: 
name值:hello struts2 

为什么struts的property标签的value属性值里可以直接使用ognl,而在struts的textfield标签的value属性值里必须在ognl外加%{} 
通常什么情况下,ognl外要套上%{}呢?

在struts2字符串中用%{}指出,其内部是一个ognl表达式,需要解析。
如<s:textfield lable="user" name="user" value="%{#session.user}" />

不过有些标签默认认定,整个字符串就是一个表达式,所以不用%{}
如<s:property value="#session.user" />

在非struts2标签中,是不能用%{}的,可以用以下方法
<input name="user" value="${session.user}" />,这是el表达式。
<input name="user" value="<s:property value='#session.user' />" />,这是struts2表达式嵌套用法。

但是注意,不能在struts2标签中的字符串中,再次嵌套struts2标签。
如<s:textfield lable="user" name="user" value="<s:property value='#session.user' />" />
也不能在struts2标签中用el表达式,
如<s:textfield lable="user" name="user" value="${session.user}" />

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/69641.html