<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-17  評論-64  文章-79  trackbacks-1
    JSP Struts HTML 標簽庫詳解
    Struts 提供了五個標簽庫,即: HTML Bean Logic Template Nested
    ?標簽庫
    ?說明
    ?HTML 標簽
    ?用來創建能夠和Struts 框架和其他相應的HTML 標簽交互的HTML 輸入表單
    ?Bean 標簽
    ?在訪問JavaBeans 及其屬性,以及定義一個新的bean 時使用
    ?Logic 標簽
    ?管理條件產生的輸出和對象集產生的循環
    ?Template 標簽
    ?隨著Tiles框架包的出現,此標記已開始減少使用
    ?Nested 標簽
    ?增強對其他的Struts 標簽的嵌套使用的能力
    ?
    標簽的公共特征
    ?
    使用固定屬性名稱的 Struts 標簽:
    ?屬性
    ?說明
    ?id
    ?命名自定義標簽創建時的腳本變量名。
    ?name
    ?指出關鍵字值,在該關鍵字下可以找到一個存在的bean 。如果給出了scope屬性,則僅僅在scope中查找。否則,根據標準的順序在各種scope中查找:(page, request, session, or application)
    ?property
    ?指出bean 中的某個屬性,可以在其中檢索值。如果沒有標明,則使用對象本身的值。
    ?scope
    ?定義了Bean在哪個范圍(page, request, session, or application)中被查找。如果沒有標明按順序查找。腳本變量(id)將在相同的范圍中創建。
    ?
    Struts 標簽也支持嵌套引用,例如:
    Property="foo.bar.baz"

    這相當于進行下面的調用:
    getFoo().getBar().getBaz()


    或者做為 setter
    getFoo().getBar().setBaz(value)
    ?
    雖然 Struts 標簽的設計原意是為了避免使用 scriptlet scriptlet 的表達式還能夠提供給所有的 Struts 標簽使用。但請確保使用完整的表達式 :
    ?錯誤:
    ?<html:link href="'<%= "/" + name %>/index.jsp>'>
    ?
    ?
    正確:
    ?<html:link href="'<%= "/" + name + "/index.jsp" %>'>??? //
    表達式必須提供整個屬性值
    ?
    ?
    Html 標簽庫
    1.??????? <html> 標簽
    它有兩個屬性: locale xhtml ,兩者都不是必需的。
    ?<html:html?locale=\"true\">

    ?
    此行代碼解析后:
    ?<html?lang=\"en\">
    2.??????? 說明:生成的結果取決于 Struts 應用程序所位于的服務器的 locale 。如果你將應用程序部署到一個不同 locale 的服務器,你不需要改變代碼, Locale 會自動調整。
    3.??????? <base> 標簽:表示所包含頁面的絕對位置。這個標簽只有內嵌在 head 標簽中才有效。
    ?<html:base/>

    ?
    此行代碼解析后:
    ?<base?href=\"http://www.mymain.com/myStrutsApp/testing.jsp\">
    4.??????? <img> 標簽
    最重要的屬性 page :圖象文件的路徑,前面必須帶有一個斜線。
    其它屬性: heignt width alt
    ??<html:img?page=\"/logo.gif\"?height=\"50\"? width=\"200\"?alt=\"Web?Logo\"/>
    5.??????? <link> 標簽
    ?<html:link?page=\"/index.html\">Click?demo</html:link>

    ?
    此行代碼解析后:
    ??<a?href=\"/index.html\">Click?demo</a>
    6.??????? <errors> 標簽:通過一個簡單的 <html:errors/> 標簽,你就可以在一個 JSP 頁面上顯示完全自定義的錯誤信息。功能超強大!!
    說明:這個標簽在 Request 對象的屬性集合中查找 reserved?key 。如果它找到一個 reserved?key ,它就假設這個 key 是一個 String 、或是一個 String 數組 ??
    ????? ?
    (它包含在模塊的 MessageResources 中查找的 message?keys )、或是類型為 org.apache.struts.action.ActionErrors 的一個對象。
    ???????? ?
    如果在應用程序資源中存在相應的信息,那么就可以用下面這些可選的 message?keys ??
    ??????? ?·?errors.header??or? errors.prefix
    :相應的信息在錯誤信息的單獨列表前顯示。 ?
    ??????? ?·?errors.footer or? errors.suffix
    :相應的信息在錯誤信息的單獨列表后顯示。
    7.??????? <form> 標簽系列
    使用 <form> 標簽時必須遵循一些規則:
    1.?????? 標簽中必須包含一個 action 屬性,它是這個標簽中唯一必需的屬性。如果不具備該屬性則 JSP 頁面會拋出一個異常。之后你必須給這個 action 屬性指定一個有效值。一個有效值是指應用程序的 Struts 配置文件中元素里的任何一個子元素的訪問路徑。而且相應的元素中必須有一個 name 屬性,它的值是 form?bean 的名稱。
    ?<html:form?action=\"/login\"?>?

    ?
    如果你有上述一個標簽?,那么你的Struts配置文件的元素中必須有一個如下顯示為粗體的元素:?
    <action-mappings>?
    ?????<action?path=\"/login\"?
    ??????type=\"com.javapro.struts.LoginAction\"??
    ??????name=\"loginForm\"
    ??????scope=\"request\"
    ??????input=\"/login.jsp\">
    ??????<forward?name=\"success\"?path=\"/mainMenu.jsp\"/>
    ????</action>
    ????.
    ????.
    ????.
    </action-mappings>? //
    這就是說一個form標簽是和form?bean相關聯的。
    2.?????? ?
    3.?????? 任何包含在 <form> 中用來接收用戶輸入的標簽( <text> <password> <hidden> <textarea> <radio> <checkbox> <select> )必須在相關的 form?bean 中有一個指定的屬性值。比如,如果你有一個屬性值被指定為 “username” <text> 標簽,那么相關的 form?bean 中也必須有一個名為 “username” 的屬性。輸入 <text> 標簽中的值會被用于生成 form?bean userName 屬性。

    <form>
    標簽還有一些不是必須但很有用的 次要 屬性。
    比如,你可以用 focus 屬性來生成 JavaScript ,它會 定焦 focus )到該 form 所包含的一個元素上。使用 focus 屬性時你需要給它指定元素的名稱。
    ?<body>
    ?<html:form?action=\"/login\"?focus=\"password\">
    ?User?Name:?<html:text?property=\"userName\"/>
    ?<br>Password:?<html:text?property=\"password\"/>
    ?<br><html:submit/>
    ?</html:form>
    ?</body>

    ?
    代碼解析后:
    ?<body>
    ?<form?name=\"loginForm\"?method=\"post\"? action=\"/myStrutsApp/login.do\">
    ?User?Name:?<input?type=\"text\"?name=\"userName\"? value=\"\">
    ?<br>Password:?<input?type=\"text\"? name=\"password\"?value=\"\">
    ?<br><input?type=\"submit\"? ?value=\"Submit\">
    ?</form>
    ?<script?language=\"JavaScript\"? type=\"text/javascript\">
    ??<!--
    ? if?(document.forms[\"loginForm\"].elements[\"password\"].type?!=?\"hidden\")?
    ?????? document.forms[\"loginForm\"].elements[\"password\"].focus()
    ??//?-->
    ?</script>

    ?</body>
    有沒有看到這個標簽庫是如何建立 JavaScript 來定焦到 password 元素上的 ?? 這也是該庫讓人著迷的地方之一。你不用擔心如何在客戶端進行編程,它會幫你自動生成。
    還可以看到, <form> 標簽中 method 屬性的缺省值是 POST

    <text>
    標簽、 <hidden> 標簽、 <textarea> 標簽、 <radio> 標簽、 <checkbox> 標簽、 <submit> 標簽、 <reset> 標簽:
    都有一個 property 屬性,最后會被轉換成 HTML 中的 name 屬性,當然還有 name value 屬性。

    <password>
    標簽
    ??<html:password?property=\"password\"??redisplay=\"false\"/>
    該標簽中的一個很重要的屬性是 "redisplay" ,它用于重新顯示以前輸入到這個區域中的值。該屬性的缺省值為 true 。然而,為了使 password 不能被重新顯示,你或許希望將該屬性的值設為 false

    <select>
    標簽和 <option> 標簽: ?
    ?<html:select?property=\"color\"?size=\"3\">
    ??<html:option?value=\"r\">red</html:option>
    ??<html:option?value=?\"g\">green</html:option>
    ??<html:option?value=?\"b\">blue</html:option>
    ?</html:select>
    遺補 1.)<html:link> 標簽
    forward 屬性:鏈接到一個 global forward 上; action 屬性:鏈接到一個 action mapping 上;
    href
    屬性:這個鏈接會轉發給控制器,由控制器做決定; page 屬性:一個相對的鏈接。

    page 屬性鏈接到 action 上:
    ??<html:link page="/html-link.do">
    ?? Linking with the page attribute.
    ?</html:link>

    注意,上面的代碼中你不必指定 web 的關聯。相反的,如果你使用 href 屬性,你就必須像下面所示指出 web 的關聯 ( 這里的關聯就是 struts-exercise)
    ?<html:link href="/struts-exercise-taglib/html-link.do">
    ?? Using Href
    ?</html:link>

    很明顯,當你在相同的 web 應用程序中做鏈接是,它比 page 屬性更加好。你也能用 href 在不同的服務器上創建鏈接:
    ?<html:link href="http://otherserver/strutsTut/html-link.do">
    ? Using Href
    ?</html:link>

    另一種鏈接到 html-link.do 的方法是用 action 屬性:
    ?<html:link action="/html-link">
    ? Using Action attribute
    ?</html:link>

    你也可以以硬編碼的方式使用參數:
    ?<html:link page="/htmllink.do?doubleProp=3.3&amp;longProp=32">
    ?? Double and long via hard coded changes
    ?</html:link>

    或者使用 paramId, paramName, and paramProperty 屬性:
    ?<html:link page="/html-link.do" paramId="booleanProperty" paramName="testbean"
    ?? paramProperty="nested.booleanProperty">
    ?? Boolean via paramId, paramName, and paramValue
    </html:link>

    解析后的代碼:
    ?<a href="/struts-exercise-taglib/html-link.do?booleanProperty=false">
    ??? Boolean via paramId, paramName, and paramValue
    ?</a>

    另外,還能使用帶 name 屬性的 Map 來實現傳遞多個參數:
    ?<%
    java.util.HashMap newValues = new java.util.HashMap();
    newValues.put("floatProperty", new Float(444.0));
    newValues.put("intProperty", new Integer(555));
    newValues.put("stringArray", new String[]
    { "Value 1", "Value 2", "Value 3" });
    pageContext.setAttribute("newValues", newValues);
    %>
    ...
    ?<html:link action="/html-link" name="newValues">
    ??? Float, int, and stringArray via name (Map)
    ?</html:link>

    你也能夠鏈接到 Map 類型的 action 上,上面的代碼解析后的結果:
    ?<html:messages property="property2" message="true" id="msg" header="messages.header" footer="messages.footer">
    ?<tr><td><%= pageContext.getAttribute("msg") %></td></tr>
    ?</html:messages>
    2.) select option 標簽
    <html:select>
    的屬性: property -與 ActionForm 中的某個屬性對應; size -顯示 option 的數目; multiple -默認為 fales ,表示不能多選,當設定為 true 時, property 對應的 ActionForm 的屬性必須為數組。
    <html:select property="name" size=6 multiple="true">
    <html:option>
    的屬性: key local bundle -指定 Resource Bundle 中的內容。
    例如 <html:option value="color1">Orange</html:option>
    <html:option value="color1" bundle="htmlselect.Colors" key="htmlselect.red"/>
    它和配置文件中的 <message-resources> 元素的 key 屬性匹配 --> <message-resource parmeter="HtmlSelectColors" key="htmlselect.Colors"/>
    <message-resource>
    中配置的資源文件為 HtmlSelectColors.properties ,相關內容為 htmlselect.red=RED
    <html:options>
    標簽,提供了一組 <option> 元素,在 <html:select> 元素中可以包含多個 <html:options> 元素。非常靈活,可以取得集合或數組中的值。
    1 <html:options collection="coll" property="value" labelProperty="label" /> 這指在 coll 的集合中存放了 options value 指實際能被提交的值, label 是顯示給用戶的值。
    2 <html:options property="value" labelProperty="label" /> collection 屬性不被指定時,將使用表單相關的 form bean form bean value 屬性存放 option value label 屬性值顯示給用戶。
    3 <html:options name="valueBean" property="values" labelName="labelsBean" labelProperty="labels" /> 這個意思是 value 值存放在名為 valueBean bean vlaues 屬性中,它是一個 collection label 值也是同樣的意思。
    <html:optionsCollection>
    標簽,和 <html:options> 的用法很相似。
    例如 <html:select property="custId"><html:optionsCollection property="customers" label="name" value="custId" /></html:select>
    這個標簽和 org.apache.structs.util.LabelValueBean 結合的很好,如果把 label value 都放到這個對象中,可以很簡單的這樣應用:
    <html:select property="custId"><html:optionsCollection property="customers" /></html:select>
    ?
    ?
    JSP Struts Bean 標簽庫詳解
    Bean 標簽庫
    ??????? 此標簽庫和 Java Bean 有很強的關聯性,設計的本意是要在 JSP JavaBean 之間提供一個接口。 Struts 提供了一套小巧有用的標簽庫來操縱 JavaBean 和相關的對象: cookie ?header ?parameter ?define write message ?include page resource size struts
    1.??????? bean:cookie bean:header bean:parameter
    這三個標簽用來重新得到 cookie, request header request parameter
    bean:header
    bean:parameter 標簽定義了一個字符串; bean:cookie 標簽定義了一個 Cookie 對象。你可以使用 value 屬性做為默認值。如果找不到指定的值,且默認值沒有設定的話,會拋出一個 request time 異常。如果你期望返回多個值的話,可把 multiple 屬性設為 true
    ?<bean:cookie id="sessionID" name="JSESSIONID" value="JSESSIONID-ISUNDEFINED"/>
    ?//
    這段代碼定義了一個名為 sessionID 的腳本變量,如果找不到一個名為 JSESSIONID cookie ,那 sessionID
    ?//
    的值就被設置為 JSESSIONID-ISUNDEFINED
    2.???????
    下面代碼會輸出一些 Cookie 對象的一些屬性:
    ?<jsp:getProperty name="sessionID " property="comment"/> …
    ?<jsp:getProperty name="sessionID" property="domain"/> …
    ?<jsp:getProperty name="sessionID" property="maxAge"/> …
    ?<jsp:getProperty name="sessionID" property="path"/> …
    ?<jsp:getProperty name="sessionID" property="value"/> …
    ?<jsp:getProperty name="sessionID" property="version"/> …
    3.???????
    下面是在 request 中輸出所有 header 的例子:?
    ?<%
    ??????? java.util.Enumeration names =((HttpServletRequest) request).getHeaderNames();
    %>

    <%
    ??????? while (names.hasMoreElements()) {
    ??????? String name = (String) names.nextElement();
    %>
    <bean:header id="head" name="<%= name %>"/>
    … <%= name %>
    … <%= head %>

    <%
    ??????? }
    %>
    4.???????
    下面是 parameter 的例子:
    ?<bean:parameter id="param1" name="param1"/>
    ?<bean:parameter id="param2" name="param2" multiple="true"/>? //
    此處定義了一個 param2[]
    ?<bean:parameter id="param3" name="param3" value="UNKNOWN VALUE"/>
    5.???????
    于其它標簽結合使用:
    ?<bean:header id="browser" name="User-Agent"/>
    <P>You are viewing this page with: <bean:write name="browser"/></P>
    ----------------------------------------------------------------------------------------------------------------------------------
    <bean:cookie id="username" name="UserName" scope="session"
    value="New User" />
    <P>Welcome <bean:write name="username" property="value"/!</P>?
    ? //
    根據 cookie 創建一個新的 Bean ,如果用戶名稱已經存儲在 cookie 中,它就不顯示為一個新用戶。?
    6.??????? ?
    7.??????? bean:define :有三個用途。
    一是定義新字符串常量:
    ?<bean:define id="foo" value="This is a new String"/>
    ?<bean:define id="bar" value='<%= "Hello, " + user.getName() %>'/>
    ?<bean:define id="last" scope="session" value='<%= request.getRequestURI() %>'/>
    8.???????
    二是復制一個現有的 bean 給新的 bean
    ?<bean:define id="foo" name="bar"/>???
    ?<bean:define id="baz" name="bop" type="com.mycompany.MyClass"/>? //
    定義腳本變量的類型,默認為Object
    9.???????
    三是復制一個現有的 bean 的屬性給新的 bean
    ?<bean:define id="bop" name="user" property="role[3].name"/>
    ??<bean:define id="foo" name="bar" property="baz" scope="request"? toScope="session"/>?
    ??//toScope
    屬性指新 bean scope ,默認為 page???
    10.???? 上段代碼的意思是把名為 bar bean baz 屬性賦值給 foo foo 的類型為 String( 默認 )
    11.???? bean:include
    這個標簽和 bean:include 標簽和相似,不同點就是它定義了一個可以復用的腳本變量。用 id 屬性命名一個新的腳本變量,還支持 forward href page transaction. 屬性,和 html:link 中的屬性意義一樣。
    ?<bean:include id="footerSpacer"? page="/long/path/footerSpacer.jsp"/>?
    ?
    然后你能夠在多個地方 (scope page) 調用:
    ?<bean:write name="footerSpacer" />
    12.???? ?
    13.???? bean:message
    用來實現對國際化的支持的一個標簽,配合 java.util 數據包中定義的 Locale ResourceBundle 類來完成這個任務,用 java.text.MessageFormat 類配置消息的格式。
    ???
    首先要指定資源文件的名稱。這個文件會包含用默認語言編寫的在程序中會出現的所有消息,這些消息以 關鍵字 - 的形式存儲。文件需要存儲在類路徑下,路徑要作為初始化參數傳送給 ActionServlet
    ???
    實現國際化的規定:所有的資源文件必須都存儲在基本資源文件所在的目錄中。基本資源文件包含的是用默認地區語言 - 本地語言編寫的消息。如果基本資源文件的名稱是 ApplicationResources.properties ,那么用其他特定語言編寫的資源文件的名稱就應該是 ApplicationResources_xx.properties(xx ISO 編碼,如英語是 en) 。因此這些文件應包含相同的關鍵字,但關鍵字的值是用特定語言編寫的。
    ???
    然后, ActionServlet 的區域初始化參數必須與一個 true 值一起傳送,這樣 ActionServlet 就會在用戶會話中的 Action.LOCALE_KEY 關鍵字下存儲一個特定用戶計算機的區域對象。現在可以運行一個國際化的 web 站點,它可以根據用戶計算機上的設置的區域自動以相應的語言顯示。

    使用特定的字符串來替換部分消息:
    ?在資源文件中的定義:info.myKey = The numbers entered are {0},{1},{2},{3}
    ?
    標記的使用:<bean:message key="info.myKey" arg0="5" arg1="6" arg2="7" arg3="8"/>
    ?Jsp
    頁面的顯示:The numbers entered are 5,6,7,8? // 最多支持4個參數
    14.???? ?
    15.???? bean:page :把 Jsp 中的內部對象做為腳本變量。
    <bean:page id="requestObj" property="request"/>?
    16.???? ?
    17.???? bean:resource :獲得應用程序的資源,這個資源可以是一個 String 或從 java.io.InputStream 中讀入。使用 ServletContext.getResource()ServletContext.getResourceAsStream() 方法檢索 web 應用中的資源,如果在檢索資源時發生問題,就會產生一個 ruquest time 異常。?
    ?<bean:resource id="webxml" name="/WEB-INF/web.xml"/>
    18.???? 使用 input 屬性時,資源會做為一個 InputStream ,如果不指定就被當成一個 String
    19.???? bean:size :得到存儲在 array collection map 中的數目,類型為 java.lang.Integer
    ?<bean:size id="count" name="employees" />
    20.???? ?
    21.???? bean:struts :復制 Struct 對象 ( 三種類型 ) 給新的 bean scope page
    ?<bean:struts id="form" formBean="CustomerForm"/>???
    ?<bean:struts id="fwd" forward="success"/>
    ?<bean:struts id="map" mapping="/saveCustomer"/>
    22.???? ?
    23.???? bean:write :以字符串形式輸出 bean 的屬性值。
    filter
    屬性:設為 true 時,將 HTML 保留字轉換為實體 ("<" 轉換為 &lt);
    ignore
    屬性:如果對象不存在,不會拋出異常。
    ?<bean:write name="userRegistration" property="email" scope="request"/>
    posted on 2007-03-22 22:34 飛鳥 閱讀(590) 評論(0)  編輯  收藏 所屬分類: Struts
    主站蜘蛛池模板: 在线观看亚洲AV日韩A∨| 伊人久久免费视频| 亚洲三级在线免费观看| 国产精品亚洲高清一区二区| 毛片a级毛片免费播放100| 久久大香伊焦在人线免费| 四虎国产精品成人免费久久 | 亚洲av日韩专区在线观看| 日韩亚洲Av人人夜夜澡人人爽| 亚洲国产精品无码久久青草| 在线jlzzjlzz免费播放| 97免费人妻无码视频| 特级精品毛片免费观看| 花蝴蝶免费视频在线观看高清版 | 亚洲精品网站在线观看不卡无广告| 成人影片麻豆国产影片免费观看 | 久久精品国产亚洲av麻豆| 亚洲区小说区图片区| 免费a在线观看播放| 韩国18福利视频免费观看| 亚洲免费网站观看视频| 99视频在线看观免费| 18禁在线无遮挡免费观看网站| 久久免费观看视频| 国产一级婬片A视频免费观看| 亚洲视频在线免费| 一级特黄色毛片免费看| 人人爽人人爽人人片av免费| 日本一区二区三区免费高清在线 | 日本一道在线日本一道高清不卡免费| 在线观看日本免费a∨视频| 国产人在线成免费视频| 成人免费AA片在线观看| 性色av无码免费一区二区三区| 免费影院未满十八勿进网站| 色se01短视频永久免费| 毛片免费在线播放| 日韩视频在线免费观看| 波多野结衣视频在线免费观看| 亚洲成人影院在线观看| 在线观看亚洲av每日更新|