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>