Struts2之OGNL表达式中#$,%的用法差异
Struts2之OGNL表达式中#,$,%的用法区别
1. 访问OGNL上下文和Action上下文,#相当于ActionContext.getContext();可以访问这几个ActionContext中的属性:
2. 用于过滤和投影(projecting)集合,如books.{?#this.price<100};
3. 构造Map,如#{'foo1':'bar1', 'foo2':'bar2'},在select和radio标签中经常用到。
1. 用于在国际化资源文件中,引用OGNL表达式。
2. EL表达式 ${sessionScope.user.sex}等于${sessionScope.user["sex"]}
一样的,如果是${username}没有指定scope那么查找顺序是Page---Request---Session---Application
3. 在Struts 2配置文件中,引用OGNL表达式,如:
struts2 井号,星号,百分号
“#”主要有三种用途:
1. 访问OGNL上下文和Action上下文,#相当于ActionContext.getContext();可以访问这几个ActionContext中的属性:
parameters |
#parameters.id[0]作用相当于request.getParameter("id") |
request |
#request.userName相当于request.getAttribute("userName") |
session |
#session.userName相当于session.getAttribute("userName") |
application |
#application.userName相当于application.getAttribute("userName") |
attr按request > session > application顺序 |
#attr.userName相当于按顺序在以上三个scope内读取属性,直到找到为止 |
<select id="rolelist" name="filter_EQL_dept.id" style="width: 150px;" class="input2"> <option value="">--请选择--</option> <s:iterator value="listDepts"> <option value="<s:property value='id'/>" <s:property value='#parameters["filter_EQL_dept.id"][0] == id ? "selected":""'/>> <s:property value='deptname'/> </option> </s:iterator> </select>
2. 用于过滤和投影(projecting)集合,如books.{?#this.price<100};
3. 构造Map,如#{'foo1':'bar1', 'foo2':'bar2'},在select和radio标签中经常用到。
“%”的用途是在标志的属性为字符串类型时,计算OGNL表达式的值
<s:url value="%{#foobar['foo1']}" />
“$”有两个主要的用途
1. 用于在国际化资源文件中,引用OGNL表达式。
2. EL表达式 ${sessionScope.user.sex}等于${sessionScope.user["sex"]}
一样的,如果是${username}没有指定scope那么查找顺序是Page---Request---Session---Application
3. 在Struts 2配置文件中,引用OGNL表达式,如:
<action name="downloadCaseFile" class="com.business.action.DownloadFileAction"> <result type="stream"> <param name="contentType">${contentType}</param> <param name="contentLength">${contentLength}</param> <param name="contentDisposition">attachment;filename="${filename}"</param> <param name="inputName">fileStream</param> <param name="bufferSize">4096</param> </result> </action>