?2. form-beans元素
該元素主要用來配置表單驗證的類。它包含如下屬性:
1. classname:一般用得少,指定和form-bean無素對應(yīng)的配置類,默認(rèn)為org.apache.struts.config.FormBeanConfig,如果自定義,則必須擴展FormBeanConfig類。可有可無。
2. name:ActionForm Bean的惟一標(biāo)識。必須。
3. type:ActionForm的完整類名。必須。
如下所示:
<form-beans>
<form-bean
name="Loign"
type="com.ha.login">
</form-bean>
</form-beans>
如果是動態(tài)Action FormBean,還必須配置form-bean元素的form-property子元素。它包含四個屬性,上面三個,還有一個initial 元素:以字符串的形式設(shè)置表單字段的初始值,如果沒有設(shè)置該屬性,則是基本類型為0,如果是對象則為null。可有可無。如下所示:
<form-beans>
<form-bean
name="Loign"
type="com.ha.login">
<form-property name="ok"? type="java.lang.String"/>
<form-property name="oks"? type="java.lang.String"/>
<form-property name="okss"? type="java.lang.Integer" initial="20"/>
</form-bean>
</form-beans>
?3. global-exceptions元素
該元素主要配置異常處理,它的exception子元素代表全局的異常配置。struts采取配置的方式來處理異常。它用來設(shè)置java異常和異常處理類org.apache.struts.action.ExceptionHandler之間的映射。它有七個屬性,如下所示:
1. className:指定和exception元素對應(yīng)的配置類,默認(rèn)為:org.apache.struts.config.ExceptionConfig。可有可無。
2. Handler:指定異常得理類,默認(rèn)為:org.apache.struts.action.ExceptionHandler。可有可無
3. key:指定在Resource Bundle中描述該異常的消息key
4. path:指定當(dāng)異常發(fā)生時的轉(zhuǎn)發(fā)路徑。
5. scope:指定ActionMessages實例的存放范圍,可選值包括:request和session,默認(rèn)為request。可有可無。
6. type:指定所需處理異常類的名字,必須。
7. bundle:指定Resource Bundle
如下所示:
<global-exceptions>
<exception
key="global.error.invalidlogin"
path="/error.jsp"
scope="request"
type="com.hn.tree"
/>
</global-exceptions>
?4. global-forwards元素
該元素主要用來聲明全局的轉(zhuǎn)發(fā)關(guān)系,它具有以下四個屬性:
1. className:和forward元素對應(yīng)的配置類,默認(rèn)為:org.apache.struts.action.ActionForward。可有可無。
2. contextRelative:此項為true時,表時path屬性以"/"開頭,相對于當(dāng)前上下文的URL,默認(rèn)為false.可有可無。
3. name:轉(zhuǎn)發(fā)路徑的邏輯名.必填。
4. path:轉(zhuǎn)發(fā)或重定向的URL,當(dāng)contextRelative=false時,URL路徑相對于當(dāng)前應(yīng)用(application),當(dāng)為ture時,表示URL路徑相對于當(dāng)前上下文(context)。
5.? redirect:當(dāng)此項為ture時,表示執(zhí)行重定向操作。當(dāng)此項為false時表示轉(zhuǎn)向操作。默認(rèn)為false。
如下所示:
<global-forwards>
<forward? name="forms1" ?path="/a.do"/>
<forward? name="forms2" ?path="/nb.jsp"/>
<global-forwards>
?5. action-mappings元素
描述從特定的請求路徑到相應(yīng)的Action類的映射。它具有以下幾個屬性:
1. attribute:設(shè)置和Action關(guān)聯(lián)的ActionForm Bean在request和session范圍內(nèi)的key。如:Form Bean存在于request范圍內(nèi),此項設(shè)為“myBenas”,則在request.getAttribute("myBenas")就可以返回該Bean的實例。
2. classsName:和action元素對應(yīng)的配置元素,默認(rèn)為:org.apache.struts.action.ActionMapping.
3. forward:轉(zhuǎn)發(fā)的URL路徑。
4. include:指定包含的URL路徑。
5. input:輸入表單的URL路徑,當(dāng)表單驗證失敗時,將把請求轉(zhuǎn)發(fā)到該URL。
6. name:指定和Action關(guān)聯(lián)的Action FormBean的名字,該名字必須在Form-Bean定義過。
7. path:指定訪問Action的路徑,以“/”開頭,無擴展名。
8. parameter:指定Actgion的配置參數(shù),在Action類的execute()方法中,可以調(diào)用ActionMapping對象的getParameter()方法來讀取該配置參數(shù)。
9. roles:指定允許調(diào)用該Action的安全角色,多個角色之間用,隔開,在處理請求時,RequestProcessor會根據(jù)該配置項來決定用戶是否有權(quán)限調(diào)用Action權(quán)限。
10. scope:指定ActionForm Bean的存在范圍,可選取為request和session,默認(rèn)為session。
11. type:指定Action類的完整類名。
12. unknown:如果此項為true,表示可以處理用戶發(fā)出的所有無效的Action URL,默認(rèn)為false;
13. validate:指定是否要調(diào)用Action FormBean的validate方法,默認(rèn)值為ture.
注:forward、include、type屬性只能選中其中一項。
如下:
<action path="/search"
type="zxj.okBean"
name="a1"
scope="request"
validate="true"
input="/b.jsp">
<forward name="tig" path="/aa.jsp"/>
</action>
注:此中的forward是指局部的轉(zhuǎn)發(fā)路徑。global-forwards表示全局的轉(zhuǎn)發(fā)路徑。
?6. controller元素
該元素用于配置ActionServlet。它具有以下屬性。
1. bufferSize:指定上載文件的輸入緩沖大小,可選,默認(rèn)為4096
2. className:指定和controller元素對應(yīng)的配置類,默認(rèn)為org.apache.struts.config.ControllerConfig
3. conentType:字符編碼,如果在Action和JSP網(wǎng)頁中設(shè)置了,則覆蓋該設(shè)置。
4. locale:指定是否把Locale對象保存到當(dāng)前用戶的session中,默認(rèn)值為false.
5. processorClass:指定負(fù)責(zé)請求的java類完整路徑。
6. tempDir:指定處理文件的臨時工作目錄,如果此項沒有設(shè)置,將采用Servlet容器為web應(yīng)用分配的臨時工作目錄。
7. nochache:如果為true:在響應(yīng)結(jié)果中將加入特定的頭參數(shù):Pragma,Cache-Control和Expise,防止頁面被保存在客戶端的瀏覽器中,默認(rèn)為false
如下:
<controller
contentType="text/html;charset="UTF-8""
locale="true"
processorClass="con.ok"/>
?7. message-resources元素
主要配置本地化消息文本,它具有以下屬性。
1. className:和message-resources元素對應(yīng)的配置類,默認(rèn)為org.apache.struts.config.MessageResourcesConfig。
2. factory:指定消息資源的工廠類,默認(rèn)為:org.apache.struts.util.PropertyMessageResourcesFactory類
3. key:指定Resource Bundle存放的ServletContext對象中時采用的屬性Key,默認(rèn)由Globals.MESSAGES_KEY定義的字符串常量,只允許一個Resource Bundle采用默認(rèn)的屬性Key。
4. null:指定MessageSources類如何處理未知消息的key,如果為true,則返回空字符串,如果為false,則返回相關(guān)字串,默認(rèn)為false
5. prameter:指定MessageSources的資源文件名,如果為:a.b.ApplicationResources,則實際對應(yīng)的文件路徑為:WEB-INF/classes/a/b/ApplicationResources.properties.
如:
<message-resources null="false" parameter="defaultResource"/>
<message-resources key="num1" null="false" parameter="test"/>
訪問為:
<bean:message? key="zxj"/>
<bean:message? key="zxj"? bundle="num1"/>
其中,zxj表法,messagesource資源文件中的一個字符串。
?8. plugin-in元素
配置Struts的插件,屬性如下:
1.?className:指定的Struts插件類,必須實現(xiàn)org.apache.struts.action.PlugiIn接口。如:
<plug-in
className="a.b.c.">
<set-property property="xxx" value="/WEB-INF/aa.xml"??/>
</plug-in>
?后記,多模塊的配置,可以供多個應(yīng)用應(yīng)用不同的struts-config.xml
?這些定義完之后,就是對資源文件的修改了,就是指定字段的替換
最后在jsp文件中運用驗證,簡單的一段代碼:
<td width="219" height="30" align="right">
????<font size="2">
?????<b>
??????<bean:message key="label.username" />
??????:
?????</b>
????</font>
???</td>
???<td width="218" height="30">
????<html:text property="userName" maxlength="17" size="20" styleClass="smallInput" />
????<font color="red">
?????*
????</font>
???</td>
???<td width="291" height="30">
????<font size="2" color="red">
?????<b>
??????<html:messages id="message" property="userName">
???????<li>
????????<bean:write name="message" />
???????</li>
??????</html:messages>
?????</b>
????</font>
???</td>
??</tr>
紅色部分就是進行驗證后的信息顯示,其中藍色的部分名稱要與validation.xml文件中的保持一致!!!
?標(biāo)簽庫 |
?說明 |
?HTML 標(biāo)簽 | ?用來創(chuàng)建能夠和Struts 框架和其他相應(yīng)的HTML 標(biāo)簽交互的HTML 輸入表單 |
?Bean 標(biāo)簽 | ?在訪問JavaBeans 及其屬性,以及定義一個新的bean 時使用 |
?Logic 標(biāo)簽 | ?管理條件產(chǎn)生的輸出和對象集產(chǎn)生的循環(huán) |
?Template 標(biāo)簽 | ?隨著Tiles框架包的出現(xiàn),此標(biāo)記已開始減少使用 |
?Nested 標(biāo)簽 | ?增強對其他的Struts 標(biāo)簽的嵌套使用的能力 |
?屬性 |
?說明 |
?id | ?命名自定義標(biāo)簽創(chuàng)建時的腳本變量名。 |
?name | ?指出關(guān)鍵字值,在該關(guān)鍵字下可以找到一個存在的bean 。如果給出了scope屬性,則僅僅在scope中查找。否則,根據(jù)標(biāo)準(zhǔn)的順序在各種scope中查找:(page, request, session, or application)。 |
?property | ?指出bean 中的某個屬性,可以在其中檢索值。如果沒有標(biāo)明,則使用對象本身的值。 |
?scope | ?定義了Bean在哪個范圍(page, request, session, or application)中被查找。如果沒有標(biāo)明按順序查找。腳本變量(見id)將在相同的范圍中創(chuàng)建。 |
Property="foo.bar.baz" 這相當(dāng)于進行下面的調(diào)用: getFoo().getBar().getBaz(); 或者做為setter: getFoo().getBar().setBaz(value); |
?錯誤: ?<html:link href="'<%= "/" + name %>/index.jsp>'> ? ?正確: ?<html:link href="'<%= "/" + name + "/index.jsp" %>'>??? // 表達式必須提供整個屬性值 |
?<html:html?locale=\"true\"> ?此行代碼解析后: ?<html?lang=\"en\"> |
?<html:base/> ?此行代碼解析后: ?<base?href=\"http://www.mymain.com/myStrutsApp/testing.jsp\"> |
??<html:img?page=\"/logo.gif\"?height=\"50\"? width=\"200\"?alt=\"Web?Logo\"/> |
?<html:link?page=\"/index.html\">Click?demo</html:link> ?此行代碼解析后: ??<a?href=\"/index.html\">Click?demo</a> |
?<html:form?action=\"/login\"?>? ?如果你有上述一個標(biāo)簽?,那么你的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標(biāo)簽是和form?bean相關(guān)聯(lián)的。 |
?<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> |
??<html:password?property=\"password\"??redisplay=\"false\"/> |
?<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>標(biāo)簽
forward屬性:鏈接到一個global forward上;action屬性:鏈接到一個action mapping上;
href屬性:這個鏈接會轉(zhuǎn)發(fā)給控制器,由控制器做決定;page屬性:一個相對的鏈接。
用page屬性鏈接到action上:
??<html:link page="/html-link.do">
?? Linking with the page attribute.
?</html:link>
注意,上面的代碼中你不必指定web的關(guān)聯(lián)。相反的,如果你使用href屬性,你就必須像下面所示指出web的關(guān)聯(lián)(這里的關(guān)聯(lián)就是struts-exercise):
?<html:link href="/struts-exercise-taglib/html-link.do">
?? Using Href
?</html:link>
很明顯,當(dāng)你在相同的web應(yīng)用程序中做鏈接是,它比page屬性更加好。你也能用href在不同的服務(wù)器上創(chuàng)建鏈接:
?<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>
你也可以以硬編碼的方式使用參數(shù):
?<html:link page="/htmllink.do?doubleProp=3.3&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來實現(xiàn)傳遞多個參數(shù):
?<%
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上,上面的代碼解析后的結(jié)果:
?<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標(biāo)簽
<html:select> 的屬性:property-與ActionForm中的某個屬性對應(yīng);size-顯示option的數(shù)目;multiple-默認(rèn)為fales,表示不能多選,當(dāng)設(shè)定為true時,property對應(yīng)的ActionForm的屬性必須為數(shù)組。
<html:select property="name" size=6 multiple="true">
<html:option>的屬性:key、local、bundle-指定Resource Bundle中的內(nèi)容。
例如 <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,相關(guān)內(nèi)容為 htmlselect.red=RED
<html:options>標(biāo)簽,提供了一組<option>元素,在<html:select>元素中可以包含多個<html:options>元素。非常靈活,可以取得集合或數(shù)組中的值。
例1 <html:options collection="coll" property="value" labelProperty="label" /> 這指在coll的集合中存放了options,value指實際能被提交的值,label是顯示給用戶的值。
例2 <html:options property="value" labelProperty="label" /> collection屬性不被指定時,將使用表單相關(guān)的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>標(biāo)簽,和<html:options>的用法很相似。
例如 <html:select property="custId"><html:optionsCollection property="customers" label="name" value="custId" /></html:select>
這個標(biāo)簽和org.apache.structs.util.LabelValueBean結(jié)合的很好,如果把label和value都放到這個對象中,可以很簡單的這樣應(yīng)用:
<html:select property="custId"><html:optionsCollection property="customers" /></html:select>
<html:messages>的message屬性如果不設(shè)定為true,會輸出ActionErrors中所儲存的訊息,Error代表的是一個操作方面的錯誤,例如錯誤操作導(dǎo)致使用者名稱或密碼為空(當(dāng)然也許也是故意的)。
<html:messages>的message屬性如果設(shè)定為true,會輸出ActionMessages中所儲存的訊息, Message表示一個提示訊息,也許使用者輸入了不正確的資訊,例如在輸入名稱與密碼時打錯了字,程式要提示使用者他們輸入了不正確的訊息。