日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Struts 1 之html标签库

發布時間:2023/12/8 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Struts 1 之html标签库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

<html:html>標簽

?<html:html>標簽用于在網頁開頭生成HTML的<html>元素,它只有一個用于顯示用戶語言的lang屬性: <html:html lang="true">

有時候由于tld文件的版本問題(新的版本將locale改為lang),導致在訪問該頁面時會報如下錯誤:

Unable to findsetter method for attribute: lang

即沒有找到這個<html:html ?lang="true">標簽的lang屬性

解決方案:

<html:html lang="true" >

改為

<html:html locale="true">

或刪除(依據情況)

<html:html locale="true"><head><title>Welcome</title></head><body>Hello World!</body> </html:html>

生成

<html lang="en"><head><title>Welcome</title></head><body>Hello World!</body> </html>

注意,<html:html locale=“true”>中的locale屬性在生成的HTML頁面中被轉換成了lang=“en”。生成的結果取決于Struts應用程序所位于的服務器的locale。如果你將應用程序部署到一個不同locale的服務器,你不需要改變代碼。Locale會自動調整

<html:base>標簽

?<html:base>標簽在網頁的<head>部分生成HTML<base>元素。HTML<base>元素用于生成當前網頁的絕對URL路徑。

如果在網頁中使用了<html:base>標簽,當該網頁引用同一個應用的其他網頁時,只需給出相對于當前網頁的相對URL路徑即可。

<html:link>和<html:rewrite>標簽

<html:link>標簽用于生成HTML <a> 元素。<html:link> 在創建超鏈接時,有兩個優點:

(1) 允許在URL 中以多種方式包含請求參數。

(2) 當用戶瀏覽器關閉Cookie時,會自動重寫URL,把SessionID 作為請求參數包含在URL 中,用于跟蹤用戶的Session 狀態。

?

<html:link>標簽有以下重要屬性:

(1) forward:指定全局轉發鏈接。

(2) href:指定完整的URL 鍵接。

(3) page:指定相對于當前網頁的URL。

?

<html:rewrite>用于輸出超鏈接中的URI部分,但它并不生成HTML<a> 元素。URI指的是URL 中協議、主機和端口以后的內容。URI 用于指定具體的請求資源。例如,對于URL:HTTP://localhost:8080/HtmlBasic.do,它的URI為/HtmlBasic.do

html:rewriter避免了硬編碼,即便是把web.xml中的action映射路徑*.do改為其他的,用了這個標簽可以自動生產正確路徑這個是其他JSTL標簽所做不到的,常用在form表單的action屬性里,如

<form action="<html:rewriter action="/register"/>“ method="post">

?

示例:

1、創建全局轉發鏈接

??? 首先,在Struts-config.xml中<global-forwards> 元素中定義一個<forward>元素:

<global-forwards><forward name = "index"path="/index.jsp"/></global-forwards>

??? 接著,在JSP 文件中創建<html:link>標簽:

? ??

<html:link forward="index">Link to Global ActionForward </html:link>

??? <html:link> 標簽的forward 屬性和<global-forwards>元素中的<forward> 子元素匹配。以上代碼生成如下HTML 內容:

? ??

<a href="/index.jsp">Linkto Global ActionFoward</a>

??? 值得注意的是,<html:link>的forward 屬性只引用Struts-config.xml 配置文件中<global-forwards>內的<forward> 子元素,如果引用<action>內的<forward> 子元素,在運行時將會拋出異常:

??? Cannot create rewrite URL:Java.Net.MalfomedURlException: Cannot retrieve ActionForward

2、創建具有完整URL 的鏈接

??? 如果Web 應用需要鏈接到其他站點,應該給出其他站點完整URL,例如:

? ??

<html:link href="http://jakarta.apache.org/struts/index.html">Generate an "href" directly </html:link>

??? 生成HTML 代碼如下:

? ??

<a href="http://jakarta.apache.org/struts/index.html">Generate an"href" directly</a>

??? 值得注意的是,如果指定了<html:link>標簽的href 屬性,即使用戶瀏覽器的Cookie 關閉,<html:link> 標簽也不會把用戶SessionID 作為請求參數加和到URL 中。

?

3、從當前網頁中創建相對URL

??? 如果從一個網頁鏈接到同一個應用中的另一網頁,可以采用以下方式:

? ??

<html:link page="/HtmlBasic.do">A relative link from this page </html:link>

??? <html:link> 標簽的 page 屬性用于指定相對于當前應用的URI。以上代碼生成如下HTML 內容:

? ?

<a href="/lib/HtmlBasic.do">......</a>?

4、在URL 或 URI 中包含請求參數

??? 如果要在URL或URI 中包含請求參數,只要把請求參數加在URL 或 URI的末尾就可以了。例如:

? ??

<html:link page="/HtmlBasic.do?prop1=abc&prop2=123">Hard-code the url parameters</html:link><!-- or --><html:rewrite page="/HtmlBasic.do?prop1=abc&prop2=123"/>

??? 以上代碼生成如下HTML 內容:(如果不帶“/”,則不會附帶上contextPath)

? ??

<a href=/lib/HtmlBasic.do?prop1=abc&prop2=123">......</a>

??? rewrite: /HtmlBasic.do?prop1=abc&amp;prop2=123

?

??? 提示:在HTML 中&amp 代表特殊字符"&"

?

5、在URL 或 URI 中包含單個請求變量

?????????????????

如果要在URL 中包含一個請求參數,而這人參數的值存在于當前網頁可訪問的一個變量中,可以按以下方法來實現。

為了演示這一功能,首先創建一個當前網頁可訪問的變量。例如,本例中創建了兩個變量,一個是字符類型,一個是CustomerBean ,它們存存于一個 page 范圍內:

? ??

<%/** Create a string object to store as abean in* the page content and embed in thislink*/String stringBean = "Value to Passont URL";pageContext.setAttribute("stringBean", stringBean);%><jsp:useBean id ="customerBean" scope="page"class="htmltaglibs.beans.CurstomerBean"/><jsp:setProperty name="customerBean" property="name"value="weiqin"/>

??????? 接著,把這兩個變量作為請求參數,加入到URL或URI 中:

? ?

<html:link page="/HtmlBasic.do"paramId="urlParamName"paramName="stringBean">URL encode a parameter based on astring bean value</html:link><html:link page="/HtmlBasic.do"paramId="urlParamName"paramName="customerBean"paramProperty="name">URL encode a parameter based on acustomer bean value</html:link>rewrite: <html:rewrite page="/HtmlBasic.do" paramId="urlParamName" paramName="stringBean"/>rewrite: <html:rewrite page="/HtmlBasic.do" paramId="urlParamName" paramName="customerBean" paramProperty="name"/>
?

??? <html:link> 標簽的 paramId 屬性指定請求參數名,paramName屬性指定變量的名字。如果變量為JavaBean ,用paramProperty 屬性指定JavaBean 的屬性。

??? 對于本例的stringBean,請求參數值為stringBean的字符串值。對于customerBean,指定了paramProperty 屬性,請求參數值為customerBean 的 name 屬性值。

??? 以上代碼生成如下HTML 內容:

? ??

<a href="/HtmlBasic.do?urlParamName=Value to Pass on Url">Url encode a paramter based on a stringbean value</a><a href="/HtmlBasic.do?urlParamName=weiqin">url encode a parameter based on acustomer bean value</a>rewrite: /HtmlBasic.do?urlParamName=Value toPass on Urlrewrite: /HtmlBasic.do?urlParamName=weiqin

6、在URL 或 URI 中包含多個請求變量

??? 如果在URL 或 URI 中包含多個請求參數,而這些參數的值來自多個變量,需要先定義一個Map類型的java 類,如java.util.HashMap,用它來存放請求變量。例如:

? ??

<%/** Strore values int a Map(HashMap inthis case)* and construct the URL based on theMap* /java.util.HashMap myMap = newjava.util.HashMap();myMap.put("myString", newString("myStringValue"));myMap.put("myArray" , newString[]{"str1","str2","str3"} );pageContext.setAttribute("map", myMap);%>

??? 在以上代碼的HaspMap 中存放了兩個對象,其中第二個對象是個字符串數組。HashMap 被存放在PageContext 中。接下來就可以把這個HashMap 作為請求參數,加入到URL 或 URI 中:

? ??

<%-- For this version of the<html:link> tag: --%><%-- map = a map with name/value pairs topass on the url --%><html:link page="/HtmlBasic.do" name="map">URL encode a parameter based on valuein a Map</html:link><%-- Create the same rewrite string forthe above link. --%>rewrite:<html:rewrite page="/HtmlBasic.do" name="map"/>

?

??? <html:link> 標簽的name 屬性指定包含請求變量的HashMap對象。HashMap 對象中的每一對"key/value" 代表一對或多對"請求參數名/請求參數值"。以上代碼生成如下的Html 內容:

? ??

<a href="/HtmlBasic.do?myString=myStringValue&myArray=str1&myArray=str2&myArray=str3">URL encode a parameter based on valuein a Map</a>rewrite:/HtmlBasic.do?myString=myStringValue&myArray=str1&myArray=str2&myArray=str3

<html:img>標簽

生成基本的HTML<img>元素

<html:img page="/struts-power.gif"/>

生成 html代碼如下:

<img src="/htmltaglibs/struts-power.gif">

?<html:form>標簽

<html:form action="FormBasic.do">

??????? 生成html代碼:

<form name="FormBasicAction" mothod="post"action="/htmltaglibs/FormBasic.do/">

Struts將參照Struts配置文件來查找相應的Action組件,在struts-config.xml文件中,與"FormBasic.do"對應的代碼為:

<action path="/FormBasic"type="htmltaglibs.actions.FormBasicAction"name="FormBacsicForm"scope="session"input="/FormBasic.jsp"validate="false"><foreard name="success"path="/FormBasic.jsp"> </action>

<html:text>、<html:textarea>、<html:password>標簽

在表單上創建HTML文本框字段。如下:

<html:text property="userName">

因為指定了一個userName的屬性名,它應該匹配ActionForm中的一個屬性,所一在FormBasicForm 中也必須有uerName這個屬性和相應的getter(),setter()方法。當表單提交時,struts框架會把userName字段的內容賦給form的userName屬性。

<html:textarea>、<html:password>標簽與之類似

<html:cancel>標簽

<html:cancel>標簽在表單中生成取消按鈕,當用戶按下取消按鈕使,將產生一個取消事件,這個事件由Action類來捕獲,至于如何處理這個事件,可以在Action類的execute()方法中編程來完成。

<html:submit>、<html:button>、<html:reset>標簽

<html:submit>Submit</html:submit>

其余類似

<html: hidden>標簽

?在表單上生成隱藏字段,存放用戶不希望看到和不允許修改的信息:如下兩種方式:

<html:hidden property="userName">

生成Html:

<input type="hidden" name="userName"value="propValue">

<html:checkbox>標簽

<html:checkbox>標簽在表單上生成標準的HTML檢查框,例如ActionFormBean 中的某個屬性只有兩種可選值(如true和false),就可以在表單中用<html:checkbox>標簽來表示。<html:checkbox>的使用方法為:

<html:checkbox property="ch1"/>

生成HTML代碼:

<input type="checkbox"name="cb1" value="true">

<html:checkbox>有一個value屬性,用來設置用戶選中檢查框時的值,value的默認值為true,可以用以下方式改變value屬性:

<html:checkbox property="ch1" value="true"/>
以上代碼說明當用戶選擇了這個檢查框,就把相應Bean中的ch1屬性設置為true.

其實這樣也會容易讓人搞混,例如當value="false"時,如果用戶沒有選擇這個檢查框,就把Bean中對應的屬性設置為true.

為了檢查框能正常工作,必須在Bean的reset()方法中對其進行復位,當<html:checkbox>的 value屬性為true時,必須在reset()方法中把對應的屬性設置為false.當<html:checkbox>的 value屬性為false時,必須在reset()方法中把對應的屬性設置為true.

<html:multibox>標簽

<html:multibox>標簽和<html:checkbox>一樣,可以提供html<inputtype="ch1">元素,區別在于<html:multibox>可以生成復選框,它和Form 的關聯方式不一樣。

如果應用中有多個CheckBox,并且希望在Form中用單個數組來表示它們,就可以采用<html:multibox>.<html:multibox>的使用方法如下:

1、在Form中定義一個數組,來存放所有的 CheckBox的值:

private String strArray[]=new String[0]; public String[] getStrArray(){return (this.strArray);} public void setStrArray(String strArray[]){this.strArray=strArray;}

2、其次在表單中加入<html:multibox>元素,通過設置property="strArray"來把它和Form中的數組關聯。

3、對于每個<html:multibox>元素,設置它的初始值,有以下兩種方式:

?

<html:multibox property="strArray" value="Value1"/>

?

<html:multibox property="strArray">Value2</html:multibox>

當用戶提交表單時,所有被選中的復選框的值都會被存放在Form中的相應數組中。如果某個復選框沒有被選中,那么數組就不會包含它的值,例如,如果用戶選擇了上例的兩個復選框,那么數組的內容為{"Value1","Value2"}.

<html:radio>標簽

<html:radio>標簽提供HTML<inputtype="radio">元素,表示單選按鈕,多個<html:radio>標簽可以成組使用,如下:

? ? ?

<html:radio property="r1"value="v1"/> <html:radio property="r1"value="v2"/>

以上標簽的property屬性相同,而僅僅是value不同,它們都和Form中的V1屬性對應,生成的HTML如下:

? ? ?

<input type="radio"name="r1" value="v1"> <input type="radio"name="r1" value="v2">

?<html:select>標簽

?<html:select>標簽生成HTML<select>元素。它可以在表單上創建下拉列表或多選列表。在<html:select>標簽中可以包含多個<html:option>,<html:options>和<html:optionCollection>標簽。<html:select>標簽的基本形式為:

??

<html:select property="name" multiple="true" size="6">[one or more<html:option/>,<html:options/>,<html:optionsCollection/>tags]</html:select>


<html:select>標簽有以下重要屬性:

size屬性:指每次在網頁上顯示的可選項的數目。

multiple屬性:指定是否支持多項選擇,如果設置為true,就表示多選列表,支持多項選擇;否則表示下拉列表,只支持單項選擇,默認為false.

property屬性:與ActionFormBean中的對應屬性對應,這個屬性用來存放用戶在列表上選中選項的值,在單選的情況下,Bean中的對應屬性應該定義為簡單類型(不能為數組)。在多項選擇的情況下,Bean中的對應屬性應該定義為數組類型,以便存放用戶選擇的多個選項。

value屬性:select的默認選中屬性。動態的多用EI表達式生成

?

例如:在 cust.jsp中的客戶列表為下拉列表,顏色列表為多選列表:

? ? ?

<html:select property="custId" /> <html:select property="colors" multiple="true" size="6"/>

對應的Bean為:

? ? ?

private int custId;private String colors[];public String[] getColors() {return colors;}public void setColors(String[] colors) {this.colors = colors;}public int getCustId() {return custId;}public void setCustId(int custId) {this.custId = custId;}

<html:option>標簽

<html:option>標簽生成HTML<option>元素,這個標簽被嵌套在<html:select>標簽中,代表列表的一個可選項,它的label有兩個來源:

??? 在<html:option>和</html:option>之間的文本內容。

??? 由<html:option>標簽的key,locale和bundle屬性指定的ResourceBundle中的內容。

1、在<html:option>和</html:option>之間的文本內容

? ? ? ??

<html:option value="a.orange">Orange</html:option> <html:option value="a.purple">Purple</html:option>

2、由<html:option>標簽的key,locale和bundle屬性指定的ResourceBundle中的內容

ApplicationResources.properties資源文件中存在如下鍵值對:a1=happySelect

?

標簽中通過key關聯到資源文件,指定要顯示內容。

<html:option value="1" key="a1" /> 這樣在頁面上顯示出happySelect

?

通過key,bundle同時指定要顯示的內容

?

bundle與Struts配置文件中<message-resources>元素配置的ResourceBundle的資源文件key匹配

?

<message-resources parameter="com.struts.happy" key="happyhtml"/>

<html:option value="1" bundle="happyhtml" key="a1" />

這樣在頁面上顯示出happySelect

把列表的可選項的顯示文本存放在ResourceBundle中,而不是直接在JSP文件中指定,有利于實現國際化。

<html:options>、<html:optionCollection>標簽

<html:options>標簽提供一組HTML<option>元素。在<html:select>中可以包含多個<html:options>元素,如下:

使用coolection屬性指定存在某個范圍中的集合來生成列表項,注意coolection屬性指定的集合,該對象的每一個元素為一個Bean

例如有如下實體類


public class Users {private StringuserName; private StringuserValue; public Users(){}publicUsers(String userName,String userValue) {this.userName=userName;this.userValue=userValue; } public StringgetUserName() {return userName; } public void setUserName(StringuserName) {this.userName = userName; } public StringgetUserValue() {return userValue; } public voidsetUserValue(String userValue) {this.userValue = userValue; }}?

將實體類實例放入ArrayList列表然后放入reqeust范圍內

?

Users u1=new Users("1","高中");Users u2=new Users("2","本科");Users u3=new Users("3","碩士");Users u4=new Users("4","博士");ArrayList array=new ArrayList();array.add(u1);array.add(u2);array.add(u3);array.add(u4);request.setAttribute("xueli",array);
?

使用

<html:options>標簽生成可選項

<html:select property="xueli" multiple="true" size="3"> <html:optionscollection="xueli"property="userName"labelProperty="userValue"/> </html:select>
等價于

<html:optionsCollectionname="xueli"value="userName"label="userValue"/> </html:select>

collection指定存放在request范圍內的集合?

property指定<html:option>實際值

labelProperty指定<html:option>顯示到頁面上的文本。

當使用property屬性和labelProperty屬性時,會根據屬性指定的名稱調用相應Bean中的getXXX方法來獲得屬性值。

生成HTML效果如下

?

<option value="1">高中</option> <option value="2">本科</option> <option value="3">碩士</option> <option value="4">博士</option>


利用name屬性指定存放在某個范圍中的對象,并有property屬性指定該對象的某個屬性來生成列表項。

例如

?

Object[] obj=new Object[]{"高中","本科","碩士","博士"};request.setAttribute("xueli",array);?

<html:options name="xueli"/>生成HTML效果如下:

?

<option value="高中">高中</option> <option value="本科">本科</option> <option value="碩士">碩士</option> <option value="博士">博士</option>?

如果

<html:options name="xueli" property="userName" labelProperty="userValue"/>?

將報如下異常

javax.servlet.jsp.JspException:No getter method available for property userName for bean under name xueli

<html:file>標簽

<html:file property="file"/>

當然了在做的同時還要注意以下幾點,否則就會出問題:

?1.<html:file>標簽必須嵌套在<html:form>標簽中。

?2.<html:from>標簽的method屬性必須設置為"POST".

?3.<html:from>標簽的編碼類型enctype屬性必須為"multipart/form-data".

?4.<html:file>標簽必須設置為property屬性,這個屬性和Bean中FormFile類型的屬性對應。

?

總結

以上是生活随笔為你收集整理的Struts 1 之html标签库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。