程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Unmi的Struts2學習筆記(十三)

Unmi的Struts2學習筆記(十三)

編輯:關於JAVA

柏楊在形容中國人不團結,喜歡窩裡斗用了這樣的話:每一個中國人都是一條 龍,但是三個中國人加在一起──三條龍加在一起,就成了一條豬、一條蟲,甚至 連蟲都不如--《丑陋的中國人》。可是他老人家走得走,要是能多有半個月的陽 壽,不知作有何感想。

1. <s:optiontransferselect.../> 正是考慮到通常使用而新加的用於 創建兩個下拉框,可以來回移動列表項。有屬性設置是否顯示 "選定左移"、"全 部左移"、"選定右移"、"全部右移" 按鈕以及各按鈕上的文本,其他的 list/listKey/listValue/doubleList/doubleKey/doubleValue 等屬性同 <s:doubleselect.../> 的是一樣的。還可設置 allowUpDownOnLeft/allowUpDownOnRight 是否出現相應框的上下移動選擇的按鈕 (true/false)。

2. <s:radio.../> 的用法與 <s:checkboxlist.../> 完全一樣 ,只頁面表現不一樣,一個多選,一個單選。

3. <s:optgroup.../> 要放在 <s:select.../> 中使用,選項分 組,屬性有 list/listKey/listValue,不再說明它們的意義了,參考前篇筆記對 <s:checkboxlist.../> 對應屬性的描述,它生成 html 的 <optgroup> 標簽。

4. <s:token/> 生成如下的內容:(struts.token.name 標識哪個隱藏 域存了 token 值)

<input type="hidden" name="struts.token.name" value="struts.token"/>

<input type="hidden" name="struts.token" value="7GXL55LPSGU19SDC9D3VP54I20XT3BVA"/>

注意自定義的表單域別重名了。它的作用是防止表單重復提交,每次加載頁面 struts.token 的值都不一樣,如果兩次提交時該值一樣,則認為是重復提交。此 時要啟用 TokenInterceptor(token) 攔截器,最好是也啟用 TokenSessionStoreInterceptor(token-session) 攔截器,不然後台會出現錯誤 提示:

2008-5-17 22:39:21 com.opensymphony.xwork2.interceptor.ParametersInterceptor setParameters

嚴重: ParametersInterceptor - [setParameters]: Unexpected Exception catched: Error setting expression 'struts.token' with value '[Ljava.lang.String;@1c2e163'

但不影響使用。不過如果只有 token-session 攔截器卻是不行的。

token 和 token-session 攔截器的啟用,是在 struts.xml 配置文件中,既 可以為包啟用,也可以單獨為某個 action 啟用:

1) 為包啟用 token 和 token-session

<package name="TestStruts" extends="struts-default">
   <interceptors>
  <interceptor-stack name="myStack">
    <interceptor-ref name="token"/>
    <interceptor-ref name="token-session"/>
   <interceptor-ref name="defaultStack" />
  </interceptor-stack>
  </interceptors>
  <default-interceptor-ref name="myStack" />
  <action name="Login" class="com.unmi.struts2.action.LoginAction">
    <result name="input">/login.jsp</result>
    <result name="invalid.token">/exception.jsp</result>
   </action>

2) 為 Action 啟用 token 和 token-session

<action name="Login" class="com.unmi.struts2.action.LoginAction">
  <interceptor-ref name="token" />
  <interceptor-ref name="token-session" />
  <interceptor-ref name="defaultStack" />
   <result name="input">/login.jsp</result>
  <result name="invalid.token">/exception.jsp</result>
</action> ; 

注意 token、token-session 和 defaultStack 的順序要保證,還需要加上名 為 "invalid.token" 的 result,當發現重復提交時轉向到這個邏輯頁,如 /exception.jsp,在 /exception.jsp 加上 <s:actionerror /> 在出現重 復提交時就會提示:The form has already been processed or no token was supplied, please try again.

5. 熟悉了 <s:optiontransferselect.../> 的話, <s:updownselect.../> 就很簡單了,它不過就是能讓選項上下移動的下拉 框,可控制上移、下移、全選按鈕是否顯示及其文本。emptyOption="true" 能會 列表框加一個空選項。

6. 除前面的外還有一些非表單標簽。<s:a.../> 生成一個超鏈接, <s:div.../> 生成一個 div 片段。

7. <s:actionerror/> 在 Action 實例的 getActionErrors() 返回不 為 null 時輸出該方法返回的系列錯誤。<s:actionmessage/> 在 Action 實例的 getActionMessages() 返回不為 null 時輸出該方法返回的系列消息。在 Action 中可用  addActionError("錯誤"); addActionMessage("消息"); 加入 錯誤或消息,或是捕獲了重復提交是會執行 addActionError()。 <s:fielderror/> 默認列表顯示所有的類型轉換錯誤或校驗錯誤,如果用

8. <s:fielderror><s:param>username</s:param></s:field error> 則只顯示對 username 輸入框的轉換或校驗錯誤,用於 simple 主題 ,跟在每個輸入框後只顯示相應一條錯誤是很有用。

9. <s:component.../> 用於直接取用 ftl/jsp/vm 模板, theme/templateDir/template 分別指定主題、主題目錄、主題名。用嵌套的 <s:param name="paramName" value="paramValue"/> 設置參數值,然後在 模板中能用 $parameters.paramName 或 $parameters['paramName'] 取到這個值 。例如 index.jsp 文件中:

</s:component>
  <s:component theme="customTheme" templateDir="customTemplateDir" template="jspCustomTemplate.jsp">
    <s:param name="list" value="{'one','two','three'}"/>
  </s:component>

就會取用模板 web 目 錄/customTemplateDir/customTheme/jspCustomTemplate.jsp 文件,其他 ftl 和 vm 類似。jspCustomTemplate.jsp 的內容如下:

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
 
<div style="background-color:#eeeeee;">
  <b>JSP自定義模板<br>
   <s:select list="parameters.list"/>
</div> 

這樣在浏覽 index.jsp 時會顯示出一個下拉框來,<s:component.../> 對於相似內容的顯示很有用處的。

10. <s:tree.../> 和 <s:treenode.../> 初步,先看一個例子 :

<s:tree theme="ajax" label="中國" showGrid="true">
   <s:treenode theme="ajax" label="江西">
    <s:treenode theme="ajax" label="吉安"></s:treenode>
   </s:treenode>
  <s:treenode theme="ajax" label="廣東">
    <s:treenode theme="ajax" label="深圳"></s:treenode>
   </s:treenode>
</s:tree>

tree 和 treenode 有點像 menu 和 menuitem,但是 tree 下是 treenode, treenode 下不能有 tree,只要 treenode 下又有 treenode 則表示它為樹枝節 點,否則為葉子節點。因為默認主題 xhtml 下沒有 tree-close.ftl 和 treenode-close.ftl 模板,所以必須為 tree 和 treenode 指定 ajax 主題,不 然就會出問題。<s:tree.../> 還有更多的控制屬性,如展開或收縮時圖片 ,網格圖片、nodeIdProperty、nodeTitleProperty 屬性等,用到時再細究。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved