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>