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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Struts2 表单和非表单标签

發(fā)布時(shí)間:2024/1/23 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Struts2 表单和非表单标签 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

學(xué)習(xí)內(nèi)容

Struts 2表單標(biāo)簽

?Struts 2非表單標(biāo)簽

能力目標(biāo)

?熟練使用Struts 2表單標(biāo)簽開發(fā)表單

?熟練使用Struts 2非表單標(biāo)簽

?


本章簡(jiǎn)介

上一章講述了ognlStruts2標(biāo)簽庫中的數(shù)據(jù)訪問標(biāo)簽和邏輯控制標(biāo)簽。本章將重點(diǎn)介紹Struts2標(biāo)簽庫中的表單標(biāo)簽和非表單標(biāo)簽。

表單標(biāo)簽主要用于生成HTML中的表單。

非表單標(biāo)簽主要包含一些常用的功能標(biāo)簽,例如顯示日期或樹形菜單。熟練使用Struts2標(biāo)簽將大大簡(jiǎn)化視圖頁面的代碼編輯工作,提高視圖頁面的維護(hù)效率。

核心技能部分?

?

7.1?表單標(biāo)簽

?Struts的表單標(biāo)簽,可分為兩種:form標(biāo)簽本身和單個(gè)表單元素的標(biāo)簽。form標(biāo)簽本身的行為不同于表單元素標(biāo)簽。Struts 2的表單元素標(biāo)簽都包含了非常多的屬性,但有很多屬性完全是通用的。

7.1.1?表單標(biāo)簽的通用屬性

所有表單標(biāo)簽處理類都繼承了UIBean類,UIBean包含了一些通用屬性,這些通用屬性分成3:

模板相關(guān)屬性。

?JavaScript相關(guān)屬性。

?通用屬性。

除了這些屬性之外,所有表單元素標(biāo)簽都存在一個(gè)特殊的屬性:form,這個(gè)屬性引用表單元素所在的表單,通過該form屬性,可以實(shí)現(xiàn)表單元素和表單之間的交互。例如,我們可以通過${ parameters.form. id }來取得表單元素所在表單的ID。下面詳細(xì)列出這些表單標(biāo)簽的通用屬性。

模板相關(guān)的通用屬性如下:

?templateDir:指定該表單所用的模板文件目錄。

?theme:指定該表單所用的主題。

?template:指定該表單所用的模板。

Javascript相關(guān)的通用屬性如下:

?onclick:指定鼠標(biāo)在該標(biāo)簽生成的表單元素上單擊時(shí)觸發(fā)的JavaScript函數(shù)。

?onmousedown:指定鼠標(biāo)在該標(biāo)簽生成的表單元素上按下時(shí)觸發(fā)的JavaScript函數(shù)。

?onmouseup:指定鼠標(biāo)在該標(biāo)簽生成的表單元素上松開時(shí)觸發(fā)的JavaScript函數(shù)。

?onmouseover:指定鼠標(biāo)在該標(biāo)簽生成的表單一元素上懸停時(shí)觸發(fā)的JavaScript函數(shù)。

?onmouseout:指定鼠標(biāo)移出該標(biāo)簽生成的表單元素時(shí)觸發(fā)的JavaScript函數(shù)。

?onfocus:指定該標(biāo)簽生成的表單元素得到焦點(diǎn)時(shí)觸發(fā)的函數(shù)。

?onblur:指定該標(biāo)簽生成的表單元素失去焦點(diǎn)時(shí)觸發(fā)的函數(shù)。

?onkeypress:指定單擊鍵盤上某個(gè)鍵時(shí)觸發(fā)的函數(shù)。

?onkeyup:指定松開鍵盤某個(gè)鍵時(shí)觸發(fā)的函數(shù)。

?onkeydown:指定按下鍵盤上某個(gè)鍵時(shí)觸發(fā)的函數(shù)。

?onselect:對(duì)下拉列表項(xiàng)等可以選擇表單元素,指定選中該元素時(shí)觸發(fā)的JavaScript函數(shù)。

?onchange:對(duì)于文本框等可以接受輸入的表單元素,指定當(dāng)值改變時(shí)觸發(fā)的JavaScript函數(shù)。

因?yàn)?/span>HTML元素本身的限制,并不是每個(gè)HTML元素都可以觸發(fā)以上的所有函數(shù)。因此,上面的屬性并不是對(duì)Struts 2的每個(gè)標(biāo)簽都有效。

Struts 2還允許為表單元素設(shè)置提示,但鼠標(biāo)在這些元素上懸停時(shí),系統(tǒng)將出現(xiàn)提示,

Struts 2將這種特性稱為Tooltip。與Tooltip相關(guān)的通用屬性如下:

?tooltip:設(shè)置此組件的Tooltip

?tooltipIcon:設(shè)置Tooltip圖標(biāo)的URL路徑。

?tooltipAboveMousePointer:是否在光標(biāo)位置上顯示Tooltip。也可通過設(shè)置tooltipOffseY屬性,設(shè)置Tooltip與光標(biāo)位置的垂直位移。

?tooltipBgColor:設(shè)置Tooltip的背景色。

?tooltipBgImg:設(shè)置Tooltip的背景圖片。

?tooltipBorderWidth:設(shè)置Tooltip邊框的寬度。

?tooltipBorderColor:設(shè)置Tooltip邊框的顏色。

?tooltipDelay:設(shè)置顯示Tooltip的時(shí)間延遲(單位是毫秒)

?tooltipFixCoordinateX:設(shè)置固定Tooltip在指定的X坐標(biāo)上,與tooltipSticky屬性結(jié)合時(shí)很有用。

?tooltipFixCoordinateY設(shè)置固定Tooltip在指定的Y坐標(biāo)上,與tooltipSticky屬性結(jié)合時(shí)很有用。

?tooltipFontColor:設(shè)置Tooltip的字體顏色。

?tooltipFontFace:設(shè)置Tooltip的字體,例如verdana. ?geneva, ?sans-serif等。

?tooltipFontSize:設(shè)置Tooltip的字體大小,例如30px

?tooltipFontWeight:設(shè)置Tooltip的字體是否使用粗體,可以接受normalbold(粗體)兩個(gè)值。

?tooltipLeftOfMousePointer:設(shè)置是否在光標(biāo)左側(cè)顯示Tooltip,默認(rèn)是在右邊顯示。

?tooltipOffsetX:設(shè)置Tooltip相對(duì)光標(biāo)位置的水平位移。

?tooltipOffsetY:設(shè)置Tooltip相對(duì)光標(biāo)位置的垂直位移。

?tooltipOpacity:設(shè)置Tooltip的透明度,設(shè)置值可以是0(完全透明)100(不透明)之間的數(shù)字。Opera瀏覽器不支持該屬性。

?tooltipPadding:指定Tooltip的內(nèi)部間隔。例如,邊框和內(nèi)容之間的間距。

?tooltipShadowColor:使用指定的顏色為Tooltip創(chuàng)建陰影。

?tooltipShadowWidth:使用指定的寬度為Tooltip創(chuàng)建陰影。

?tooltipStatic:設(shè)置Tooltip是否隨著光標(biāo)的移動(dòng)而移動(dòng)。

?tooltipSticky:設(shè)置Tooltip是否一直停留在它初始的位置,直到另外一個(gè)Tooltip被激活,或者瀏覽者點(diǎn)擊了HTML頁面。

?tooltipStayAppearTime:指定一個(gè)Tooltip消失的時(shí)間間隔(毫秒),即使鼠標(biāo)還在相關(guān)的HTML元素上不動(dòng)。設(shè)置值<=0,就和沒有定義一樣。

?tooltipTextAlign:設(shè)置Tooltip的標(biāo)題和內(nèi)容的對(duì)齊方式,可以是right(右對(duì)齊)left(左對(duì)齊)justify(居中對(duì)齊)

?tooltipTitle:設(shè)置Tooltip的標(biāo)題文字。

?tooltipTitleColor:設(shè)置Tooltip的標(biāo)題文字的顏色。

?tooltipWidth:設(shè)置Tooltip的寬度。

除此之外,Struts 2還有其他的通用屬性,用于設(shè)置表單元素的CSS樣式等。

?cssClass:設(shè)置該表單元素的class屬性。

?cssStyle:設(shè)置該表單一元素的style屬性,使用內(nèi)聯(lián)的CSS樣式。

?title:設(shè)置表單元素title屬性。

?disabled:設(shè)置表單元素的disabled屬性。

?label:設(shè)置表單元素的label屬性。

?labelPosition:設(shè)置表單元素label所在位置,可接受的值為top(上面)left(左邊),默認(rèn)是在左邊。

?requiredposition:定義必填標(biāo)記(默認(rèn)以*作為必填標(biāo)記)位于label元素的位置,可接受的值為left(左面)right(右邊),默認(rèn)是在右邊。

?name:定義表單一元素的name屬性,該屬性值用十與Action的屬性形成對(duì)應(yīng)。

?required:定義是否在表單元素的label上增加必填標(biāo)記(默認(rèn)以*作為必填標(biāo)記),設(shè)置為true時(shí)增加必填標(biāo)記,否則不增加。

?tabIndex:設(shè)置表單元素的tabindex屬性。

?value:設(shè)置表單兀素的value屬性。

7.1.2 表單標(biāo)簽的namevalue屬性

對(duì)于表單元素而言,namevalue屬性之間存在一個(gè)獨(dú)特的關(guān)系:因?yàn)楸韱卧氐?/span>name屬性會(huì)映射到Action的屬性,當(dāng)該表單對(duì)應(yīng)的Action已經(jīng)被實(shí)例化,且對(duì)應(yīng)屬性有值時(shí),表單元素會(huì)顯示出該屬性的值,該值就是表單元素的value值。

name屬性設(shè)置表單元素的名字,表單元素的名字實(shí)際上封裝著一個(gè)請(qǐng)求參數(shù),而請(qǐng)求參數(shù)是被封裝到Action屬性的。因此,可以將該name屬性指定為你希望綁定值的表達(dá)式。 ???例如如下代碼:

<!--將下面文本框的值綁定到Action的person屬性的firstName屬性 -- >

??????<s:textfield ?name="person.firstName”/>

大多數(shù)場(chǎng)景下,我們希望表單元素里可以顯示出對(duì)應(yīng)Action的屬性值,此時(shí)就可以通過指定該表單元素的value屬性來完成該工作。例如使用如下代碼:

????<!--使用表達(dá)式生成表單元素的值一>

??????<s:textfield name=”person.firstName”?value=”${person.firstName}”/>

事實(shí)上,因?yàn)?/span>namevalue屬性的特殊關(guān)系,如果我們使用Struts 2的標(biāo)簽庫,則無需指定value屬性,因?yàn)?/span>Struts 2會(huì)為我們處理這些。

對(duì)于如下代碼:

????<!一將下面文本框的值綁定到Action的person屬性的firstName屬性一>

??????<s:textfield name=”person.firstName"/>

雖然上面的文本框沒有指定value屬性,但Struts 2一樣會(huì)在該文本框中輸出對(duì)應(yīng)Action里的屬性值。

7.1.3?常用表單標(biāo)簽

1. ?<s:form>標(biāo)簽

該標(biāo)簽的主要屬性是actionnamespace,例如下面的代碼:

<s:form action="tag1.action" namespace="/tags">

</s:form>

生成的HTML代碼如下所示:

<form action="tag1.action" method="post">

2.?文本類標(biāo)簽

此類標(biāo)簽包括文本框(<s:textfield?/>)、密碼框(<s:password?/>)、文本區(qū)域(<s:textarea>),下面是一個(gè)簡(jiǎn)單的示例。

示例7.1

<body> <s:form action="tag1" namespace="/tags"> <s:textfield name="loginname" label="登錄名稱"></s:textfield> <s:password name="pwd" label="登錄密碼"></s:password> <s:textarea name="info" label="個(gè)人簡(jiǎn)介" cols="28" rows="10"></s:textarea> <s:submit value="提交"></s:submit> <s:reset value="重填"></s:reset> </s:form></body>

?

7.1.1 文本類標(biāo)簽

上述代碼生成的HTML如下所示。

<body> <form action="/Struts8/tags/tag1.action" method="post"> <table class="wwFormTable"> <tr> <td class="tdLabel"> <label for="tag1_loginname" class="label">登錄名稱:</label></td> <td> <input type="text" name="loginname"/></td> </tr> <tr><td class="tdLabel"><label for="tag1_pwd" class="label">登錄密碼:</label> </td> <td> <input type="password" name="pwd" id="tag1_pwd"/></td> </tr> <tr><td class="tdLabel"> <label for="tag1_info" class="label">個(gè)人簡(jiǎn)介:</label></td><td> <textarea name="info" cols="28" rows="10"></textarea> </td> </tr> <tr><td colspan="2"><input type="submit" value="提交"/></td> </tr> <tr><td colspan="2"><input type="reset" value="重填"/></td> </tr> </table> </form> </body>

3.?checkboxlist標(biāo)簽

checkboxlist標(biāo)簽可以一次創(chuàng)建多個(gè)復(fù)選框,用于一次生成多個(gè)HTML標(biāo)簽中的<input type="checkbox"/>,它根據(jù)list屬性指定的集合來生成多個(gè)復(fù)選框。因此,使用該標(biāo)簽指定一個(gè)list屬性。除此之外,其他屬性大部分是通用屬性,此處不再贅述。

除此之外,checkboxlist表單還有兩個(gè)常用屬性:

?listKey:該屬性指定集合元素中的某個(gè)屬性(例如集合元素為Person實(shí)例,指定Person實(shí)例的name屬性)作為復(fù)選框的value。如果集合是Map,則可以使用keyvalue值分別代表Map對(duì)象的keyvalue作為復(fù)選框的value

?listValue:該屬性指定集合元素中的某個(gè)屬性(例如集合元素為Person實(shí)例,指定Person實(shí)例的name屬性)作為復(fù)選框的標(biāo)簽。如果集合是Map,則可以使keyvalue值分別代表Map對(duì)象的keyvalue作為復(fù)選框的標(biāo)簽。

下面是使用該標(biāo)簽的代碼示例,其中分別使用了簡(jiǎn)單集合、簡(jiǎn)單Map對(duì)象、集合里放置Java實(shí)例來創(chuàng)建多個(gè)復(fù)選框。

下面是該JSP頁面代碼:

<body> <h2>使用checkboxlist標(biāo)簽</h2> <s:form> <!-- 使用字符串集合生成多個(gè)復(fù)選框 --> <s:checkboxlistlist="{'JSP','Servlet','Struts2','Ajax'}" name="skills" label="熟悉技術(shù)"> </s:checkboxlist> <!-- 使用Map對(duì)象來生成多個(gè)復(fù)選框 --> <s:checkboxlist name="skillsarea" label="你所關(guān)注的技術(shù)領(lǐng)域"list="#{'java':'JAVA', '.net':'.NET', 'db':'Database','ajax':'Ajax'}"listKey="key"listValue="value"/> </s:form> </body>

在上面代碼中,簡(jiǎn)單集合對(duì)象和簡(jiǎn)單Map對(duì)象都是通過OGNL表達(dá)式直接生成,但實(shí)際使用中一般是從后臺(tái)查詢出一個(gè)javaBean集合然后傳遞到頁面進(jìn)行顯示。該JavaBean的類代碼如下:

public class?Book

{

private int id;

?????private ?String bookName;

private ?String author;

//getter setter方法省略…….

}

Jsp頁面代碼:

<%//模擬后臺(tái)查詢到的數(shù)據(jù) 并轉(zhuǎn)發(fā)到頁面List books = new ArrayList();books.add(new Book(1,"殺殺人,喝喝酒---水滸傳","施耐庵"));books.add(new Book(2,"瘋狂的猴子---西游記","吳承恩"));books.add(new Book(3,"瘋狂的石頭---紅樓夢(mèng)","曹雪芹"));books.add(new Book(4,"大哥,我們動(dòng)手吧---三國(guó)演義","羅貫中"));request.setAttribute("bs",books);%><s:form> <!-- 使用字符串集合生成多個(gè)復(fù)選框 --> <s:checkboxlistlist="{'JSP','Servlet','Struts2','Ajax'}" name="skills" label="熟悉技術(shù)"> </s:checkboxlist> <!-- 使用Map對(duì)象來生成多個(gè)復(fù)選框 --> <s:checkboxlist name="skillsarea" label="你所關(guān)注的技術(shù)領(lǐng)域"list="#{'java':'JAVA', '.net':'.NET', 'db':'Database','ajax':'Ajax'}"listKey="key"listValue="value"/><s:checkboxlist label="你喜歡的圖書" name="lb" list="#attr.bs"listKey="id" listValue="bookName" value="1"></s:checkboxlist> </s:form>

當(dāng)我們?cè)跒g覽器中瀏覽該頁面時(shí),將看到如圖7.1.2所示的頁面。

?

7.1.2 checklist標(biāo)簽

生成的HTML代碼如下所示:

<html><head><base href="http://localhost:8080/test23/"><title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --></head><body><form id="" action="/test23/" method="post"> <table class="wwFormTable"> <!-- 使用字符串集合生成多個(gè)復(fù)選框 --><tr><td class="tdLabel"><label for="_skills" class="label">熟悉技術(shù):</label></td><td > <input type="checkbox" name="skills" value="JSP" id="skills-1"/> <label for="skills-1" class="checkboxLabel">JSP</label> <input type="checkbox" name="skills" value="Servlet" id="skills-2"/> <label for="skills-2" class="checkboxLabel">Servlet</label> <input type="checkbox" name="skills" value="Struts2" id="skills-3"/> <label for="skills-3" class="checkboxLabel">Struts2</label> <input type="checkbox" name="skills" value="Ajax" id="skills-4"/> <label for="skills-4" class="checkboxLabel">Ajax</label> <input type="hidden" id="__multiselect__skills" name="__multiselect_skills" value="" /> </td> </tr><!-- 使用Map對(duì)象來生成多個(gè)復(fù)選框 --> <tr><td class="tdLabel"><label for="_skillsarea" class="label">你所關(guān)注的技術(shù)領(lǐng)域:</label></td><td > <input type="checkbox" name="skillsarea" value="java" id="skillsarea-1"/> <label for="skillsarea-1" class="checkboxLabel">JAVA</label> <input type="checkbox" name="skillsarea" value=".net" id="skillsarea-2"/> <label for="skillsarea-2" class="checkboxLabel">.NET</label> <input type="checkbox" name="skillsarea" value="db" id="skillsarea-3"/> <label for="skillsarea-3" class="checkboxLabel">Database</label> <input type="checkbox" name="skillsarea" value="ajax" id="skillsarea-4"/> <label for="skillsarea-4" class="checkboxLabel">Ajax</label> <input type="hidden" id="__multiselect__skillsarea" name="__multiselect_skillsarea" value="" /> </td> </tr><tr><td class="tdLabel"><label for="_lb" class="label">你喜歡的圖書:</label></td><td > <input type="checkbox" name="lb" value="1" id="lb-1" checked="checked"/> <label for="lb-1" class="checkboxLabel">殺殺人,喝喝酒---水滸傳</label> <input type="checkbox" name="lb" value="2" id="lb-2"/> <label for="lb-2" class="checkboxLabel">瘋狂的猴子---西游記</label> <input type="checkbox" name="lb" value="3" id="lb-3"/> <label for="lb-3" class="checkboxLabel">瘋狂的石頭---紅樓夢(mèng)</label> <input type="checkbox" name="lb" value="4" id="lb-4"/> <label for="lb-4" class="checkboxLabel">大哥,我們動(dòng)手吧---三國(guó)演義</label> <input type="hidden" id="__multiselect__lb" name="__multiselect_lb" value="" /> </td> </tr> </table></form> </body> </html>

從圖7.1.2中可以看出,通過指定checkboxlist標(biāo)簽的listKeylistValue屬性,可以分別指定多個(gè)復(fù)選框的value和標(biāo)簽。

4.?radio標(biāo)簽

該標(biāo)簽與上面的checkboxlist標(biāo)簽的用法幾乎完全相同,都是通過指定listlistKeylistValue等屬性來生成HTML元素。不同的是,checkboxlist標(biāo)簽生成的是復(fù)選框,而radio標(biāo)簽生成的是單選框。

下面我們看一個(gè)實(shí)例,代碼如下所示:

示例7.2

<body>

<h2>使用radio標(biāo)簽</h2>

<s:form>

<!-- 使用字符串集合來生成多個(gè)單選框 -->

<s:radio

?? list="{'JSP','Servlet','Struts2','Ajax'}" name="skills"

?????label="熟悉技術(shù)">

</s:radio>

<!-- 使用Map對(duì)象來生成多個(gè)單選框 -->

<s:radio name="skillsarea" label="你所關(guān)注的技術(shù)領(lǐng)域"

????list="#{'java':'JAVA', '.net':'.NET', 'db':'Database','ajax':'Ajax'}"

??listKey="key"

??listValue="value"

??value="'java'"/>

</s:form>

</body>

該頁面的運(yùn)行效果如圖7.1.3所示。

?

<body> <h2>使用radio標(biāo)簽</h2> <form action="/Struts8/s-radio.jsp" method="post"> <table class="wwFormTable"> <!-- 使用字符串集合來生成多個(gè)單選框 --> <tr><td class="tdLabel"> <label for="s-radio_skills" class="label">熟悉技術(shù):</label></td><td> <input type="radio" name="skills" value="JSP"/> <label for="s-radio_skillsJSP">JSP</label> <input type="radio" name="skills" value="Servlet"/> <label for="s-radio_skillsServlet">Servlet</label> <input type="radio" name="skills" value="Struts2"/> <label for="s-radio_skillsStruts2">Struts2</label> <input type="radio" name="skills" value="Ajax"/> <label for="s-radio_skillsAjax">Ajax</label></td> </tr> <!-- 使用Map對(duì)象來生成多個(gè)單選框 --> <tr><td class="tdLabel"><label for="s-radio_skillsarea" class="label"> 你所關(guān)注的技術(shù)領(lǐng)域:</label></td><td> <input type="radio" name="skillsarea" checked="checked" value="java"/> <label for="s-radio_skillsareajava">JAVA</label> <input type="radio" name="skillsarea" value=".net"/> <label for="s-radio_skillsarea.net">.NET</label> <input type="radio" name="skillsarea" value="db"/> <label for="s-radio_skillsareadb">Database</label> <input type="radio" name="skillsarea" value="ajax"/> <label for="s-radio_skillsareaajax">Ajax</label> </td> </tr> </table> </form> </body>

5.?select標(biāo)簽

select標(biāo)簽用于生成一個(gè)下拉列表框,通過為該元素指定list屬性,系統(tǒng)會(huì)使用list屬性指定的集合來生成下拉列表框的選項(xiàng)。這個(gè)list屬性指定的集合,既可以是普通集合,也可以是Map對(duì)象,還可以是集合元素是對(duì)象的集合。

除此之外,select表單還有如下幾個(gè)常用屬性:

??listKey:該屬性指定集合元素中的某個(gè)屬性(例如集合元素為Person實(shí)例,指定Person實(shí)例的name屬性)作為復(fù)選框的value。如果集合是Map,則可以使用keyvalue值分別代表Map對(duì)象的keyvalue作為復(fù)選框的value

??listValue:該屬性指定集合元素中的某個(gè)屬性(例如集合元素為Person實(shí)例,指定Person實(shí)例的name屬性)作為復(fù)選框的標(biāo)簽。如果集合是Map ,則可以使用keyvalue值分別代表Map對(duì)象的keyvalue作為復(fù)選框的標(biāo)簽。

??multiple:設(shè)置該列表框是否允許多選。

從上面介紹中可以看出,select標(biāo)簽的用法與checkboxlist標(biāo)簽的用法非常相似。

下面我們看一個(gè)實(shí)例,其中分別使用了簡(jiǎn)單集合、簡(jiǎn)單Map對(duì)象、集合里放置Java實(shí)例來創(chuàng)建多個(gè)復(fù)選框。代碼如下所示:

示例7.3

?

?????<body>

??<h2>使用select標(biāo)簽</h2>

<!-- 使用字符串集合來生成下拉列表框?-->

<s:elect list="{'Struts2從入門到精通' , 'Spring2開發(fā)寶典' , 'Ajax實(shí)戰(zhàn)'}"

?????name="books" label="圖書列表">

</s:select>

<br><br>

<!-- 使用簡(jiǎn)單對(duì)象來生成下拉列表框?-->

<s:select name="books_map" label="圖書列表"

????list="#{'struts2':'Struts2從入門到精通', 'spring2':'Spring2開發(fā)寶典',

?????????????'ajax':'Ajax實(shí)戰(zhàn)'}"

listKey="key"

listValue="value"/>

<br><br>

<s:select name="b" label="圖書列表"

??????????multiple="true"

????????????list="#attr.bs"

??????????listKey="id"

????????????listValue="bookName" value="2"/>

??</body>

?

該頁面的運(yùn)行效果如圖7.1.4所示。

?

7.1.4 ?使用select標(biāo)簽

注意:可以使用selectvalue屬性設(shè)置<s:select>標(biāo)簽生成下拉框時(shí)的初始值,默認(rèn)情況下將以生成下拉框的第一項(xiàng)為初始值。

6.?doubleselect標(biāo)簽

????doubleselect標(biāo)簽會(huì)生成一個(gè)級(jí)聯(lián)列表框(會(huì)生成兩個(gè)下拉列表框),當(dāng)選擇第一個(gè)下

拉列表框時(shí),第二個(gè)下拉列表框的內(nèi)容會(huì)隨之改變。

????因?yàn)閮蓚€(gè)都是下拉選擇框,因此需要指定兩個(gè)下拉選擇框的選項(xiàng),因此有如下常用的屬性:

?list:指定用于輸出第一個(gè)卜拉列表框中選項(xiàng)的集合。

?listKey:該屬性指定集合元素中的某個(gè)屬性(例如集合元素為Person實(shí)例,指定Person實(shí)例的name屬性)作為第一個(gè)下拉列表框的value。如果集合是Map,則可以使用keyvalue值分別代表Map對(duì)象的keyvalue作為復(fù)選框的value

?listValue:該屬性指定集合元素中的某個(gè)屬性(例如集合元素為Person實(shí)例,指定Person實(shí)例的name屬性)作為復(fù)選框的標(biāo)簽。如果集合是Map,則可以使用keyvalue值分別代表Map對(duì)象的keyvalue作為第一個(gè)下拉列表框的標(biāo)簽。

?doubleList:指定用于輸出第一個(gè)下拉列表框中選項(xiàng)的集合。

?doubleList Key:該屬性指定集合元素中的某個(gè)屬性(例如集合元素為Person實(shí)例,指定Person實(shí)例的name屬性)作為第一個(gè)下拉列表框的value。如果集合是Map,則可以使用keyvalue值分別代表Map對(duì)象的keyvalue作為復(fù)選框的value

?doubleList Value:該屬性指定集合元素中的某個(gè)屬性(例如集合元素為Person實(shí)例,指定Person實(shí)例的name屬性)作為復(fù)選框的標(biāo)簽。如果集合是Map,則可以使用keyvalue值分別代表Map對(duì)象的keyvalue作為第一個(gè)下拉列表框的標(biāo)簽。

?doubleName:指定第二個(gè)下拉列表框的name屬性。

?cssStyle:設(shè)置第一級(jí)下拉框的樣式。

?doubleCssStyle:設(shè)置第二級(jí)下拉框的樣式。

下面看一個(gè)實(shí)例,代碼如下所示:

示例7.4

(1)創(chuàng)建用于描述部門的實(shí)體類。

?

public class DeptInfo {

?

private String deptId;

private String deptName;

private Set<EmpInfo> empSet = new HashSet<EmpInfo>();//包含多個(gè)職工

//無參構(gòu)造函數(shù)

public DeptInfo() {

super();

}

//有參構(gòu)造函數(shù)

public DeptInfo(String deptId, String deptName) {

super();

this.deptId = deptId;

this.deptName = deptName;

}

//getter setter 方法省略......

}

(2)創(chuàng)建用于描述職工的實(shí)體類。

public class EmpInfo { private String empId; private String empName; //無參構(gòu)造函數(shù) public EmpInfo() { super(); } //有參構(gòu)造函數(shù) public EmpInfo(String empId, String empName) { super(); this.empId = empId; this.empName = empName; } //getter setter 方法省略...... }

(3)創(chuàng)建業(yè)務(wù)邏輯控制器。

public class DoubleSelectAction extends BaseAction { //用于封裝用戶請(qǐng)求的部門編號(hào) private String deptId; //用于封裝用戶請(qǐng)求的職工編號(hào) private String empId; public String execute() throws Exception { //獲取輸出對(duì)象 PrintWriter out = super.getResponse().getWriter(); out.println("<h2>你選擇的信息是: <hr/>部門編號(hào): " + this.deptId + "<br/>"); out.println(" 職工編號(hào): " + this.empId + "</h2>"); return null; } public String getDeptId() { return deptId; } public void setDeptId(String deptId) { this.deptId = deptId; } public String getEmpId() { return empId; } public void setEmpId(String empId) { this.empId = empId; } }

(4)創(chuàng)建jsp頁面。

<body><%DeptInfo d1 = new DeptInfo("D001","銷售部");DeptInfo d2 = new DeptInfo("D002","財(cái)務(wù)部");EmpInfo e1 = new EmpInfo("E001","張三");EmpInfo e2 = new EmpInfo("E002","李四");EmpInfo e3 = new EmpInfo("E003","王五");EmpInfo e4 = new EmpInfo("E004","趙六");d1.getEmpSet().add(e1);d1.getEmpSet().add(e2);d2.getEmpSet().add(e3);d2.getEmpSet().add(e4);//構(gòu)造map,用于存放所有部門Map map = new HashMap();map.put(d1,d1.getEmpSet());map.put(d2,d2.getEmpSet());request.setAttribute("map",map);%><s:form action="doubleSelect" namespace="/test">級(jí)聯(lián)下拉框:<hr/><s:doubleselect cssStyle="width:130px" list="#request.map.keySet()" listKey="deptId" listValue="deptName" name="deptId"doubleCssStyle="width:130px" doubleList="#request.map[top]" doubleListKey="empId" doubleListValue="empName" doubleName="empId"/><hr><s:submit value="提交"/> </s:form></body>

運(yùn)行以上Jsp頁面,結(jié)果如圖7.1.5所示,

?

7.1.5 DoubleSelect標(biāo)簽的使用

在圖7.1.5中,對(duì)第一級(jí)“部門”下拉框做任意選擇時(shí),第二級(jí)“職工”下拉框內(nèi)容將做相應(yīng)的級(jí)聯(lián)改變。

單擊“提交”按鈕,提交到DoubleSelectAction控制器,運(yùn)行結(jié)果如圖7.1.6所示。

?

7.1.6 級(jí)聯(lián)下拉框提交

注意:

使用doubleselect標(biāo)簽時(shí),必須放在<<s:form/>標(biāo)簽中使用,且必須為該<s:form .../>標(biāo)簽指定action屬性?

7. optiontransferselect標(biāo)簽

Optiontransferselect創(chuàng)建兩個(gè)選項(xiàng)用來轉(zhuǎn)移下拉列表項(xiàng),該標(biāo)簽會(huì)生成兩個(gè)<select/>標(biāo)簽,并且會(huì)生成系列的按鈕,這系列的按鈕可以控制選項(xiàng)在兩個(gè)下拉列表之間移動(dòng)、升降。當(dāng)提交該表單時(shí),兩個(gè)<select/>標(biāo)簽的請(qǐng)求參數(shù)都會(huì)被提交。

因?yàn)樵摌?biāo)簽會(huì)生成兩個(gè)下拉列表框,因此需要分別指定兩個(gè)下拉列表框中的集合、Label等屬性,下面是該標(biāo)簽常用的屬性。

?addAllToLeftLabel:設(shè)置全部移動(dòng)到左邊按鈕上的文本。

?addAllToRightLabel:設(shè)置全部移動(dòng)至右邊按鈕上的文本。

?addToLeftLabel:設(shè)置向左移動(dòng)按鈕上的文本。

?addToRightLabel:設(shè)置向右移動(dòng)按鈕上的文本。

?a1lowAddAllToLeft:設(shè)置是否出現(xiàn)全部移動(dòng)到左邊的按鈕。

?a1lowAddAllToRight:設(shè)置是否出現(xiàn)全部移動(dòng)到右邊的按鈕。

?a1lowAddToLeft:設(shè)置是否出現(xiàn)移動(dòng)到左邊的按鈕。

?a1lowAddToRight:設(shè)置是否出現(xiàn)移動(dòng)到右邊的按鈕。

?leftTitle:設(shè)置左邊列表框的標(biāo)題。

?rightTitle:設(shè)置右邊列表框的標(biāo)題。

?a1lowSelectAll:設(shè)置是否出現(xiàn)全部選擇按鈕。

?selectAllLabel:設(shè)置全部選擇按鈕上的文本。

?doubleList:設(shè)置用于創(chuàng)建第二個(gè)下拉選擇框的集合。

?doubleListKey:設(shè)置創(chuàng)建第二個(gè)下拉選擇框的選項(xiàng)value的屬性。

?doubleListValue:設(shè)置創(chuàng)建第二個(gè)下拉選擇框的選項(xiàng)label的屬性。

?doubleName:設(shè)置第二個(gè)下拉選擇框的name屬性。

?doubleValue:設(shè)置第二個(gè)下拉選擇框的value屬性。

?doubleMultiple:設(shè)置第二個(gè)下拉選擇框是否允許多選。

?list:設(shè)置用于創(chuàng)建第一個(gè)下拉選擇框的集合。

?listKey:設(shè)置創(chuàng)建第一個(gè)下拉選擇框的選項(xiàng)value的屬性。

?listValue:設(shè)置創(chuàng)建第一個(gè)下拉選擇框的選項(xiàng)label的屬性。注意此處的list , ?doubleList , ??listKey , ?doubleListKey , ?listValuedoubleListValue非常類似于checkboxlist標(biāo)簽中list, listKeylistValue的用法,只是此處用于生成兩個(gè)下拉列表框,而前者是生成多個(gè)復(fù)選框而已。

?name:設(shè)置第一個(gè)下拉選擇框的name屬性。

?value:設(shè)置第一個(gè)下拉選擇框的value屬性。

?multiple:設(shè)置第一個(gè)下拉選擇框是否允許多選。

下面代碼是使用optiontransferselect標(biāo)簽的示范,它分別指定了兩個(gè)簡(jiǎn)單集合來生成兩個(gè)下拉列表框的列表項(xiàng)。下面是使用optiontransferselect標(biāo)簽的代碼:

<!-- 使用簡(jiǎn)單集合對(duì)象來生成可移動(dòng)的下拉列表框 其中l(wèi)ist指定生成第一個(gè)下拉選擇框的選項(xiàng)的集合

??????????doubleList指定生成第二個(gè)下拉選擇框的選項(xiàng)的集合-->

??????<s:optiontransferselect

????????label="請(qǐng)選擇你喜歡的圖書"

??????????????name="cnb00k"

??????????leftTitle="中文圖書"

????????rightTitle="外文圖書"

????????list="{'Spring2.。寶典','輕量級(jí)J2EE企業(yè)應(yīng)用實(shí)戰(zhàn)','基于J2EE的Ajax寶典'}"

??????????multiple="true"

????????addToLeftLabel="向左移動(dòng)"

????????selectAllLabel="全部選擇"

??????????addAllToRightLabel="全部右移"

????????????headerKey="cnKey"

????????headerValue="一選擇中文圖書一"

??????????emptyOption="true"

??????????doubleList="{'Expert One一on一One J2EE Design and Development’,

????????????????'JavaScript:The Definitive Guide’}"

??????????????doubleName="enBook"

doubleHeaderKey="enKey"

doubleHeaderValue="-一選擇外文圖書-一"

doubleEmptyOption="true"

doubleMultiple="true"></s:optiontransferselect>

在瀏覽器中瀏覽該頁面,將看到如圖7.1.7所示的頁面。

?

7.1.7 ?optiontransferselect標(biāo)簽

8.?token標(biāo)簽

<s:token>標(biāo)簽用于避免刷新頁面時(shí)多次提交表單,通過借助于TokenInterceptor攔截器來實(shí)現(xiàn)阻止頁面重復(fù)提交。當(dāng)Jsp使用<s:token/>標(biāo)簽的時(shí)候,Struts2會(huì)建立一個(gè)GUID(全局唯一的字符串)并放在Session中,同時(shí)在表單中添加一個(gè)隱藏域。而TokenInterceptor攔截器會(huì)攔截用戶的請(qǐng)求,并判斷客戶端form提交的tokensession中保存的token是否相等 ,如果相等,則執(zhí)行action對(duì)應(yīng)的方法并清空;否則,攔截器將直接返回invalid.token結(jié)果,不會(huì)執(zhí)行Action對(duì)應(yīng)的方法。示例7.5演示了使用token標(biāo)簽的過程。

示例7.5

(1)創(chuàng)建用于處理用戶注冊(cè)的業(yè)務(wù)邏輯控制器Action.

public class RegAction extends ActionSupport { private String uid; private String pwd; public String execute() throws Exception { HttpServletResponse response = (HttpServletResponse)ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE); response.setContentType("text/html;charset=gbk"); response.setCharacterEncoding("gbk"); PrintWriter out = response.getWriter(); Date today = new Date(); out.println("<h2>用戶注冊(cè)信息如下: <hr/>用戶名:" + this.uid + "<br/>密 碼:" + this.pwd+"<hr>"); out.println("正在進(jìn)行注冊(cè) " + today.toLocaleString() + "..."); return null; } public String getUid() { return uid; } public void setUid(String uid) { this.uid = uid; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } }

(2)創(chuàng)建Jsp頁面,命名為“reg.jsp”。

?

<body><font color="red"><s:actionerror/></font><s:form action="reg" οnsubmit="return check()"><!-- 加入token標(biāo)簽 --><s:token/>填寫會(huì)員注冊(cè)信息:<hr/>用戶名:<s:textfield name="uid"/><br/>密 碼:<s:password name="pwd"/><br>確認(rèn)密碼:<s:password name="surePwd"/><br><s:submit value="提交"></s:submit><s:reset value="重置"></s:reset></s:form> <script type="text/javascript"> function $(elementName) { return document.getElementById(elementName); } function check() { if($("reg_uid").value == "") { alert("用戶名不能為空!"); $("reg_uid").focus(); return false; } if($("reg_pwd").value == "") { alert("密碼不能為空!"); $("reg_pwd").focus(); return false; } if($("reg_pwd").value != $("reg_surePwd").value) { alert("兩次密碼不一致!"); $("reg_surePwd").focus(); return false; } return true; } </script></body>

(3)編寫用于顯示重復(fù)提交錯(cuò)誤信息的資源文件,創(chuàng)建application_zh.properties中文資源文件,將文件存放于WEB-INF/classes目錄下,內(nèi)容為“Struts.messages.invalid.token=表單已提交,不能重復(fù)提交”,并使用native2Ascii命令進(jìn)行轉(zhuǎn)化。

(4)struts.xml中配置token攔截器。

?

<struts><constant name="struts.ui.theme" value="simple" /><constant name="struts.custom.i18n.resources" value="application" /> <package name="mypackage" extends="struts-default"> <!-- 定義攔截器棧--> <interceptors> <interceptor-stack name="tokenStack"><interceptor-ref name="token" /> <!-- 使用token攔截器--><interceptor-ref name="defaultStack" /><!-- 使用默認(rèn)攔截器--></interceptor-stack></interceptors> <!-- 將攔截器棧token作為默認(rèn)攔截器,則攔截器棧中定義的所有攔截器將作用于本包的所有Action--><default-interceptor-ref name="tokenStack" /><!-- 配置注冊(cè)Action--> <action name="reg" class="com.zzab.entity.RegAction"> <!-- 當(dāng)用戶重復(fù)提交表單時(shí),流程轉(zhuǎn)到stoken.jsp--><result name="invalid.token">/stoken.jsp</result></action></package></struts>

運(yùn)行reg.jsp,運(yùn)行效果如圖7.1.8所示。

?

7.1.8 登錄頁面

單擊【提交】按鈕后就執(zhí)行了對(duì)應(yīng)的Action,如圖7.1.9所示。

?

7.1.9 執(zhí)行Action

此時(shí)刷新頁面,則根據(jù)token攔截器配置,將進(jìn)入invalid.token邏輯結(jié)果,即reg.jsp。該頁面會(huì)通過<s:actionerror/>標(biāo)簽讀取application_zh.prooperties中文資源文件的內(nèi)容并顯示。如圖7.1.10所示。

?

7.1.10 不能重復(fù)提交

7.1?非表單標(biāo)簽

7.2.1?Datetimepicker標(biāo)簽?

datetimepicke:標(biāo)簽生成一個(gè)日期、時(shí)間下拉選擇框,當(dāng)我們使用該日期、時(shí)間選擇框選擇某個(gè)日期、時(shí)間時(shí),系統(tǒng)會(huì)自動(dòng)將選中的日期、時(shí)間輸入指定文本框。

系統(tǒng)將指定日期、時(shí)間輸入指定文本框時(shí),必須轉(zhuǎn)換成日期、時(shí)間字符串,為了設(shè)置該字符串的格式,必須使用日期、時(shí)間的格式符。datetimepicker支持如下幾個(gè)格式符:

#dd:以兩位數(shù)字來顯示當(dāng)前日期的日。

#d:試圖以一位數(shù)字來顯示當(dāng)前日期的日,它不會(huì)使用兩位數(shù)字。

#MM:以兩位數(shù)字來顯示當(dāng)前日期的月。

#M:試圖以一位數(shù)字來顯示當(dāng)前日期的月,它不會(huì)使用兩位數(shù)字。

#YYYY:4位數(shù)字來顯示當(dāng)前日期的年。

#YY:以兩位數(shù)字來顯示當(dāng)前日期的年。

#y:以一位數(shù)字來顯示當(dāng)前日期的年的最后一位。

使用該標(biāo)簽時(shí),有如下幾個(gè)常用屬性:

?displayFormat:該屬性指定日期的顯示格式,例如,可以使用dd/MM/yyyy作為日期格式。

?displayWeeks:該屬性指定該日歷能顯示星期數(shù)。

?endDate:指定日期集的最后可用日期。例如2941-10-12,一旦指定了該日期,則后面的日期不可用。

?formatLength:指定日期顯示的格式,這些格式值就是DateFormat中的格式,該屬性支持的值有long, ?short, ?mediumfull 4個(gè)值。

?language:指定日期顯示的Locale,例如需要指定簡(jiǎn)體中文,則指定zh_ CN

?startDate:指定日期集的最后可用日期。例如1941-10-18,一旦指定了該日期,則前面的日期不可用。

?toggleDuration:指定日期選擇框出現(xiàn)、隱藏的切換時(shí)間。

?toggletype:指定日期選擇框出現(xiàn)、隱藏的方式,可以選擇plain, wipe, explodefade 4個(gè)值。

?type:指定日期選擇框的類型,支持的值有datetime,分別代表日期選擇框、時(shí)間選擇框。

?value:指定當(dāng)前日期、時(shí)間。可使用today來代表今天。

?weekStartsOn:指定口期選擇框中哪一天才是一周的第一天。周日是0,周六是6

在使用datetimepicker標(biāo)簽之前,首先要通過MyEclipse導(dǎo)入struts2-dojo-plugin-2.2.1.jar文件,因?yàn)樵摌?biāo)簽包含在這個(gè)Jar文件中。

示例7.6

下面我們看一個(gè)該標(biāo)簽的實(shí)例,代碼如下所示: ?

<s:form theme="simple">日期選擇部件,指定toggleType屬性,且指定value="today"<br><sx:datetimepicker name="order.date" label="購買日期" toggleType="explode"value="%{'today'}"/><hr>日期選擇部件,指定了format屬性<br><sx:datetimepicker name="order.date" label="購買日期" displayFormat="yyyy年MM月dd日"/><hr>日期選擇部件,指定了weekStartOn屬性<br><sx:datetimepicker name="order.date" label="購買日期" displayFormat="yyyy年MM月dd日" weekStartsOn="2"/><hr> </s:form>

在瀏覽器中瀏覽該頁面,將看到如7.1.11所示的頁面,在7.1.11中,如果我們單擊那些文本框后選擇日期,將出現(xiàn)一個(gè)日期選擇框。如果我們指定weekStartsOn屬性,則可以設(shè)置口期選擇框中每周中哪一天才會(huì)是第一天。

?

7.1.11?日期控件

?7.2.2?tree標(biāo)簽和treenode標(biāo)簽

這兩個(gè)標(biāo)簽主要用來生成一個(gè)樹形結(jié)構(gòu),例如常見的樹形菜單、樹形列表等。tree標(biāo)簽表示樹根,treenode標(biāo)簽表示樹的的節(jié)點(diǎn),需要嵌套在tree標(biāo)簽中。在使用這兩個(gè)標(biāo)簽之前,也需要通過MyEclipse導(dǎo)入struts2-dojo-plugin-2.2.1.jar文件。

示例7.7

下面是一個(gè)使用tree標(biāo)簽和treenode標(biāo)簽生成靜態(tài)樹形列表的示例。

<%@ page contentType="text/html; charset=utf-8" language="java" %> <%@taglib prefix="s" uri="/struts-tags" %> <%@ taglib prefix="sdt" uri="/struts-dojo-tags"%> <html> <sdt:head parseContent="true"/> <title>使用tree和treenode標(biāo)簽生成靜態(tài)樹</title> <body> <h3>使用tree和treenode標(biāo)簽生成靜態(tài)樹</h3> <sdt:tree label="計(jì)算機(jī)編程系列圖書" id="books"><sdt:treenode label="JAVA編程系列" id="java"><sdt:treenode label="Spring2.0開發(fā)寶典" id="spring"/><sdt:treenode label="Struts2.0權(quán)威指南" id="struts"/><sdt:treenode label="Hibernate3從入門到精通" id="hibernate"/></sdt:treenode><sdt:treenode label="Ajax編程系列" id="ajax"><sdt:treenode label="JavaScript一百例" id="javascript"/><sdt:treenode label="Ajax實(shí)戰(zhàn)" id="ajaxsz"/></sdt:treenode> </sdt:tree> </body> </html>

通過上述代碼可以看到,treetreenode標(biāo)簽都是通過label屬性來設(shè)置樹形列表文本,此案例樹形列表中的文本數(shù)據(jù)都寫死到里面了,實(shí)際應(yīng)用中通常是從數(shù)據(jù)庫查詢出來并由Action返回到頁面中。運(yùn)行效果如圖7.1.12所示。

?

7.1.12 樹形列表

本章總結(jié)

?Struts的表單標(biāo)簽

可分為兩種:form標(biāo)簽本身和單個(gè)表單元素的標(biāo)簽。form標(biāo)簽本身的行為不同于表單元素標(biāo)簽。Struts 2的表單元素標(biāo)簽都包含了非常多的屬性,但有很多屬性完全是通用的。

?非表單標(biāo)簽

1datetimepicke:標(biāo)簽生成一個(gè)日期、時(shí)間下拉選擇框,當(dāng)我們使用該日期、時(shí)間選擇框選擇某個(gè)日期、時(shí)間時(shí),系統(tǒng)會(huì)自動(dòng)將選中的日期、時(shí)間輸入指定文本框。

2tree標(biāo)簽和treenode標(biāo)簽。這兩個(gè)標(biāo)簽主要用來生成一個(gè)樹形結(jié)構(gòu),例如常見的樹形菜單、樹形列表等。tree標(biāo)簽表示樹根,treenode標(biāo)簽表示樹的的節(jié)點(diǎn),需要嵌套在tree標(biāo)簽中。

任務(wù)實(shí)訓(xùn)部分

1:臟字過濾

訓(xùn)練技能點(diǎn)

?token標(biāo)簽

?token攔截器

??需求說明

在第五章的任務(wù)實(shí)現(xiàn)部分,我們實(shí)現(xiàn)了對(duì)評(píng)論進(jìn)行臟字過濾功能,現(xiàn)在要求增加防止表單重復(fù)提交的功能。

2:簡(jiǎn)易計(jì)算器

訓(xùn)練技能點(diǎn)

?OGNL

?表單標(biāo)簽

??需求說明

在前面的章節(jié)中我們實(shí)現(xiàn)了一個(gè)簡(jiǎn)易計(jì)算器案例,現(xiàn)在要求使用Struts 2表單標(biāo)簽和OGNL對(duì)該案例進(jìn)行重構(gòu)。

3:動(dòng)態(tài)生成樹

訓(xùn)練技能點(diǎn)

?OGNL

?Tree標(biāo)簽

??需求說明

要求使用Struts 2 tree標(biāo)簽和OGNL動(dòng)態(tài)生成數(shù)據(jù)。

實(shí)現(xiàn)思路

(1)?創(chuàng)建用于查詢樹節(jié)點(diǎn)信息的Action,命名為TreeAction.java

public class TreeAction extends ActionSupport {? public String execute() { Object[][] obj = { ??{"1","0","短信平臺(tái)管理","#"}, ??{"2","1","用戶管理","#"}, ??{"3","1","員工管理","#"}, ??{"4","1","短信管理","#"}, ??{"5","2","用戶權(quán)限管理","userRight.jsp"}, ??{"6","2","用戶列表","userList.jsp"}, ??{"7","3","員工信息列表","empList.jsp"}, ??{"8","3","員工信息修改","empUpdate.jsp"}, ??{"9","4","接收短信","acceptMessage.jsp"}, ??{"10","4","短信統(tǒng)計(jì)","messageCount.jsp"} ??}; ?ServletActionContext.getRequest().setAttribute("obj",obj);? return SUCCESS; }}

(2)?配置TreeAction

<action name="treeaction" class="com.zzzy.action.TreeAction"> <result>/sx_tree.jsp</result> </action>

(3)?創(chuàng)建sx_tree.jsp

<sx:tree label="短信管理平臺(tái)">? <s:iterator id="row" value="#request.obj">? <s:if test="#row[1]==1">? <sx:treenode label="%{#row[2]}">? <s:iterator id="row1" value="#request.obj">? <s:if test="#row1[1]==#row[0]">? <sx:treenode label="<a href=%{#row1[3]}>%{#row1[2]}</a>" />? </s:if>? </s:iterator>? </sx:treenode>? </s:if>? ? </s:iterator>? </sx:tree>

鞏固練習(xí)

一、選擇題

1. 以下()不屬于Struts 2的表單標(biāo)簽。

A.?<s:textfield>

B.?<s:textarea>

C.?<s:submit>

D.?<s:tree>

2. token標(biāo)簽的作用是()。

A.?顯示錯(cuò)誤消息

B.?校驗(yàn)表單數(shù)據(jù)

C.?防止重復(fù)提交

D.?生成相應(yīng)的html標(biāo)簽

3. Datetimepicker標(biāo)簽的()屬性用來指定該日歷能顯示星期數(shù)。

A. ?displayFormat

B.??endDate

C.??formatLength

D.??displayWeeks

4. 以下對(duì)checkboxlist標(biāo)簽描述正確的是()。

A.?list屬性指定要循環(huán)的集合

B.?該標(biāo)簽使用集合生成一組復(fù)選框

C.?Listkey指定集合元素中的某個(gè)屬性作為復(fù)選框的文本

D.?listvalue指定集合元素中的某個(gè)屬性作為復(fù)選框的value

5. 以下對(duì)tree treenode標(biāo)簽描述錯(cuò)誤的是()。

A.?兩個(gè)標(biāo)簽主要用來生成一個(gè)樹形結(jié)構(gòu)。

B.?tree標(biāo)簽表示樹根。

C.?treenode標(biāo)簽表示樹的的節(jié)點(diǎn)。

D.?可以通過treenode list屬性指定一個(gè)集合并生成一組樹節(jié)點(diǎn)。?

二、上機(jī)練習(xí)

?在本章的核心任務(wù)部分,我們使用doubleselect標(biāo)簽實(shí)現(xiàn)了一個(gè)省市級(jí)聯(lián)列表框功能,現(xiàn)在要求把省市級(jí)聯(lián)改成樹形列表的形式。

?

總結(jié)

以上是生活随笔為你收集整理的Struts2 表单和非表单标签的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 韩国日本在线 | www色视频 | 免费久久网站 | 久操福利在线 | 欧美另类高清videos的特点 | 日韩福利在线观看 | 最好看的2019中文大全在线观看 | 国产日本欧美一区二区 | 成人高潮片免费网站 | 日韩欧美在线视频播放 | 成人免费区一区二区三区 | 欧美日韩性生活视频 | 日本免费高清视频 | 中文在线国产 | 第一章婶婶的性事 | 国模私拍一区二区 | 深夜福利网址 | 久久精品国产亚洲av久 | 国产区免费观看 | 91福利影院 | 国产高清在线观看视频 | 免费黄色看片 | 少妇综合 | 国产夜夜操 | 嫩草影院懂你的影院 | 人人干人人爱 | 国产一二三区免费视频 | 西野翔夫の目の前で犯在线 | 天天干天天干天天操 | 国产精品丝袜在线 | 一级特级毛片 | 人妻一区二区三区 | 成年男女免费视频 | 国产欧美综合一区 | 日韩美女免费视频 | 99国产精品久久久久久久成人 | 拍摄av现场失控高潮数次 | 丁香花电影在线观看免费高清 | 国产精品毛片一区视频播 | 雪白的扔子视频大全在线观看 | 日韩一区二区三区视频在线 | 亚洲日本在线观看 | 大胸美女被爆操 | 欧美a级成人淫片免费看 | 久久久精品人妻av一区二区三区 | 精品人妻一区二区三区潮喷在线 | 日韩精品亚洲一区 | 色呦呦官网 | 久久中文字幕国产 | 国产视频www | 久久手机视频 | 少妇精品在线 | 国产黄色片免费看 | 永久免费国产 | 久久激情久久 | 欧美中文字幕第一页 | 嫩草嫩草嫩草嫩草嫩草嫩草 | 国产精品偷伦视频免费看 | 五月天激情视频在线观看 | 永久在线观看 | 国产欧美亚洲精品 | 国产精品96 | 亚洲色图国产精品 | 男女一级黄色 | 337p日本大胆噜噜噜噜 | 落日余晖图片 | 欧美激情第三页 | 超碰在线网址 | 国产爽视频 | 91精品国产日韩91久久久久久 | 亚洲一区你懂的 | 97人人澡人人爽人人模亚洲 | 日韩经典一区二区三区 | 亚洲国产精品麻豆 | 国产精品一级无码 | 99久热在线精品996热是什么 | h片在线免费观看 | 日韩伦理中文字幕 | 国产精品资源在线 | 久草一本| 五月婷影院 | 91精品视频免费在线观看 | 岛国片在线播放 | 久草视频在线免费 | av片在线观看免费 | 欧美特黄 | av在线激情| 欧美精品乱码 | 成人免费网视频 | 狠狠操在线观看 | 粗大黑人巨茎大战欧美成人免费看 | 日本高清视频一区二区三区 | 成人免费福利 | 韩日视频在线 | 善良的女邻居在线观看 | 开心激情网五月天 | 国产91免费 | 奶波霸巨乳一二三区乳 | 国产精品偷伦视频免费观看了 |