OGNL:
已下方的例子
透過此頁Action去設定leagueList值,以便jsp頁面(如下方jsp頁面)使用OGNL方式來存取資料
已上例子就是透過Action的OGNL方式存取資料
Collections.unmodifiableList();
介紹這個方法是指,塞進去的List後則不可修改了
Ex:
private static final List<League> LEAGUES_CACHE = new LinkedList<League>();
上面也就是組完List資料後return 出去 ,則此值不可再做更改
第二堂課主要是在網頁的部分,利用Struts2去修改網頁顏色等設定
首先建立一個Class 並且一樣須 繼承 ActionSupport
而繼承ActionSupport 須實做 execute() 方法
public String execute() throws Exception {
ActionContext context = ActionContext.getContext();
Map<String,Object> application = context.getApplication();
LeagueService leagueSvc =(LeagueService)application.get("leagueSvc");
leagueList = leagueSvc.getAllLeagues();
return SUCCESS;
}
首先ActionContext 元件有很多好用的屬性 而我們使用的是 裡頭的getApplication屬性
此屬性回傳的是map 故下方的值須用map型別來接
再來看到 LeagueService 是已經寫好的頁面,目的是要用來接所需的資料 ,OK後則會一樣 return SUCCESS
然後一樣在src下新增一個Strut.xml 並定一個action ,class指向上方的class 如下方class屬性的路徑
<action name="list_leagues" class="duke.soccer.web.ctrler.servlet.mytest2" method="execute">
<result name="success">jsp/list_leagues.jsp</result>
</action>
將action 取名list_leagues 就像給它個ID ,再給他個result 用來接class所 return 回來
的狀況,因class 回傳為'success'所以我們給她回傳的名稱是"success"
並給予動作是連結到jsp/list_leagues.jsp 這一頁
再來就去看我們的jsp頁面
<ul>
<li><a href='<s:url action="list_leagues" var="helloLink" />'>List all leagues</a></li>
<li><a href='jsp/reg_select_league.jsp'>Register for a league</a></li>
</ul>
<a href="${helloLink}">Hello Link</a>
<s:url action="list_leagues" var="helloLink" /> 利用struts2標簽(要用時頁面開端記得
要匯入<%@ taglib prefix="s" uri="/struts-tags" %>) prefix="s"就是<s: 表示
,可以看到 此動作 去呼叫 list_leagues, 而var則是類似給他此動作的呼叫名稱(如果沒給賄直接呈現結果)
既然給了var="helloLink" ,則下發就有OGNL方式去接"helloLink": href="${helloLink}"
接下來去看我們會連置的頁面 jsp/list_leagues.jsp
<ul>
<s:iterator value="leagueList" var="league" status="loopStatus" >
<s:if test="#loopStatus.odd == true">
<s:set name="Color" value="'#CCFF66'" />
</s:if>
<s:else>
<s:set name="Color" value="'#FFFFFF'" />
</s:else>
<li style="background-color:<s:property value="Color" />">${league.title} (${league.year},${league.season})</li>
</s:iterator>
</ul>
關於一些相關標簽 可去關網 http://struts.apache.org/release/2.1.x/docs/home.html 查詢
iterator 這的status 命名為 "loopStatus"目的是在抓ID時用的,可看見範例程式下方code有#loopStatus就是抓此ID
vlaue="leagueList" 則是指一開始我們 Class 內的leagueList (此變數在執行execute時已取得相關資料)
有趣的是 Struts標籤一樣可以做 if else 陳述句
<s:if test="如果怎樣.." 則<s:set 就會怎樣... <s:else 否則 <s:set 又會怎樣...
#loopStatus.odd == true 指的是 如果loopStatus 是屬於單數行(odd) 時。
另外如果眼尖會發現 value = " '#XXXX' " 加了單引號,目的是因為"#" 字,會怕被網頁誤以為是抓XXXX 這ID
接下來 Value 值就可以用 property 標籤來取