public class OgnlAction extends ActionSupport implements ServletContextAware,
ServletRequestAware, SessionAware {
private static final long serialVersionUID = -6175904602786022346L;
private HttpServletRequest request;
private ServletContext application;
private Map<String, Object> session;
@SuppressWarnings("all")
private List<Magazine> magazineList = new ArrayList<Magazine>() {
{
add(new Magazine("時代週刊", 10));
add(new Magazine("足球之夜", 19));
add(new Magazine("時尚", 20));
add(new Magazine("時代影視", 50));
}
};
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public void setServletContext(ServletContext application) {
this.application = application;
}
@SuppressWarnings("all")
public void setSession(Map session) {
this.session = session;
}
public String execute() {
request.setAttribute("account", "account from request");
application.setAttribute("account", "account from response");
session.put("account", "account from session");
return Action.SUCCESS;
}
public List<Magazine> getMagazineList() {
return magazineList;
}
public void setMagazineList(List<Magazine> bookList) {
this.magazineList = bookList;
}
JSP頁面:
所有的ID:<struts:property value="#parameters.id"/> <br/>
第一個ID:<struts:property value="#parameters.id[0]"/> <br/>
request 中取屬性:<struts:property value="#request.account"/> <br/>
session 中取屬性:<struts:property value="#session.account"/> <br/>
application 中取屬性:<struts:property value="#application.account"/> <br/>
attr 中取屬性:<struts:property value="#attr.account"/> <br/>
<hr />
價格大於18元的雜誌共有 <struts:property value="magazineList.{?#this.price>18}.size()" /> 本,分別是:<br/>
<struts:iterator value="magazineList.{?#this.price>18}">
<struts:property value="name" /> - ¥<struts:property value="price" />. <br/>
</struts:iterator>
<hr />
名稱包含“時代”二字的雜誌共有 <struts:property value="magazineList.{?#this.name.contains('時代')}.size()"/> 本,分別是:<br/>
<struts:iterator value="magazineList.{?#this.name.contains('時代')}">
<struts:property value="name" /> - ¥<struts:property value="price" />. <br/>
</struts:iterator>
<hr />
“足球之夜”的價格爲 ¥<struts:property value="magazineList.{?#this.name.contains('足球之夜')}[0].price"/>。
其中注意OGNL的靈活用法
2 下面兩個注意區別:
<struts:label label="#request.account"></struts:label>
<struts:label label="%{#request.account}"></struts:label>
其中第一個會輸出字符串#request.account",第二個會把request.account的結果輸出.
3 autocomplete控件:
<s:url id="dataUrl" value="/autocompleteAjaxData.jsp" />
請選擇國家:
<struts:autocompleter name="country" theme="ajax" href="%{dataUrl}"
loadOnTextChange="true" loadMinimumCount="1" autoComplete="false"
showDownArrow="true" indicator="indicator" />
<img id="indicator" src="images/loading.gif" />
其中href爲獲取數據的URL,indicator可以爲一個屬性或文字,獲取數據的JSP如下:
out.clear();
request.setCharacterEncoding("UTF-8");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
String[] countries = { "。。。。。“}
String country = request.getParameter("country");
if (country == null)
country = "";
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < countries.length; i++) {
if (countries[i].toLowerCase()
.startsWith(country.toLowerCase())) {
if (buffer.length() != 0)
buffer.append(",");
buffer.append("['" + countries[i] + "']");
}
}
Thread.sleep(500);
out.print("[" + buffer + "]");
4 連動框doubleselect:
<struts:head theme="ajax" />
<%
List<String> provinceList = new ArrayList<String>();
provinceList.add("北京");
provinceList.add("上海");
provinceList.add("天津");
provinceList.add("重慶");
provinceList.add("河北");
provinceList.add("河南");
provinceList.add("山東");
provinceList.add("山西");
provinceList.add("江蘇");
provinceList.add("浙江");
request.setAttribute("provinceList", provinceList);
Map<String, List<String>> cityMap = new HashMap<String, List<String>>();
{
// 北京市
List<String> cityList = new ArrayList<String>();
cityList.add("東城區");
cityList.add("西城區");
cityList.add("海淀區");
cityList.add("朝陽區");
cityMap.put("北京", cityList);
}
{
// 山東省
List<String> cityList = new ArrayList<String>();
cityList.add("青島");
cityList.add("濟南");
cityList.add("濰坊");
cityList.add("煙臺");
cityList.add("淄博");
cityMap.put("山東", cityList);
}
request.setAttribute("cityMap", cityMap);
%>
<struts:form action="login">
<struts:doubleselect name="province" list="#request.provinceList"
doubleName="city" doubleList="#request.cityMap.get(top)" label="請選擇省份、市"/>
</struts:form>
5 optiontransferselect標籤
<%
List<String> provinceSelected = new ArrayList<String>();
provinceSelected.add("北京");
provinceSelected.add("上海");
provinceSelected.add("天津");
provinceSelected.add("重慶");
provinceSelected.add("河北");
provinceSelected.add("河南");
provinceSelected.add("山東");
provinceSelected.add("山西");
provinceSelected.add("江蘇");
provinceSelected.add("浙江");
request.setAttribute("provinceSelected", provinceSelected);
List<String> provinceUnselected = new ArrayList<String>();
provinceUnselected.add("湖南");
provinceUnselected.add("湖北");
provinceUnselected.add("雲南");
provinceUnselected.add("廣東");
provinceUnselected.add("廣西");
request.setAttribute("provinceUnselected", provinceUnselected);
%>
<struts:form action="login">
<struts:optiontransferselect name="province"
doubleList="#request.provinceSelected"
list="#request.provinceUnselected" doubleName="city" leftUpLabel="向上"
leftDownLabel="向下" rightDownLabel="向下" rightUpLabel="向上"
leftTitle="已經選中的省份" headerKey="" headerValue="---請選擇省份---"
rightTitle="剩餘的省份" />
</struts:form>
6 TAB標籤
<s:tabbedPanel id="test">
<s:div id="one" label="第一個 TabItem" theme="ajax" labelposition="top"
cssStyle="padding: 10px; ">
第一個 TabItem <br />
第一個 TabItem <br />
</s:div>
<s:div id="two" label="第二個 TabItem" theme="ajax"
cssStyle="padding: 10px; ">
第二個 TabItem <br />
第二個 TabItem <br />
</s:div>
<s:url action="divNews" id="divNewsUrl"></s:url>
<s:div id="three" label="新聞列表" theme="ajax" href="%{#divNewsUrl}">
</s:div>
</s:tabbedPanel>
<br/>
<s:tabbedPanel id="test2" closeButton="tab">
<s:div id="one2" label="第一個 TabItem" theme="ajax" labelposition="top"
cssStyle="padding: 10px; ">
第一個 TabItem <br />
第一個 TabItem <br />
</s:div>
<s:div id="two2" label="第二個 TabItem" theme="ajax"
cssStyle="padding: 10px; ">
第二個 TabItem <br />
第二個 TabItem <br />
</s:div>
<s:div id="three2" label="新聞列表" theme="ajax" href="%{#divNewsUrl}">
</s:div>
</s:tabbedPanel>