?2. form-beans元素
該元素主要用來配置表單驗證的類。它包含如下屬性:
1. classname:一般用得少,指定和form-bean無素對應的配置類,默認為org.apache.struts.config.FormBeanConfig,如果自定義,則必須擴展FormBeanConfig類??捎锌蔁o。
2. name:ActionForm Bean的惟一標識。必須。
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 元素:以字符串的形式設置表單字段的初始值,如果沒有設置該屬性,則是基本類型為0,如果是對象則為null??捎锌蔁o。如下所示:
<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采取配置的方式來處理異常。它用來設置java異常和異常處理類org.apache.struts.action.ExceptionHandler之間的映射。它有七個屬性,如下所示:
1. className:指定和exception元素對應的配置類,默認為:org.apache.struts.config.ExceptionConfig。可有可無。
2. Handler:指定異常得理類,默認為:org.apache.struts.action.ExceptionHandler??捎锌蔁o
3. key:指定在Resource Bundle中描述該異常的消息key
4. path:指定當異常發(fā)生時的轉發(fā)路徑。
5. scope:指定ActionMessages實例的存放范圍,可選值包括:request和session,默認為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元素
該元素主要用來聲明全局的轉發(fā)關系,它具有以下四個屬性:
1. className:和forward元素對應的配置類,默認為:org.apache.struts.action.ActionForward。可有可無。
2. contextRelative:此項為true時,表時path屬性以"/"開頭,相對于當前上下文的URL,默認為false.可有可無?!?br /> 3. name:轉發(fā)路徑的邏輯名.必填。
4. path:轉發(fā)或重定向的URL,當contextRelative=false時,URL路徑相對于當前應用(application),當為ture時,表示URL路徑相對于當前上下文(context)。
5.? redirect:當此項為ture時,表示執(zhí)行重定向操作。當此項為false時表示轉向操作。默認為false。
如下所示:
<global-forwards>
<forward? name="forms1" ?path="/a.do"/>
<forward? name="forms2" ?path="/nb.jsp"/>
<global-forwards>
?5. action-mappings元素
描述從特定的請求路徑到相應的Action類的映射。它具有以下幾個屬性:
1. attribute:設置和Action關聯(lián)的ActionForm Bean在request和session范圍內(nèi)的key。如:Form Bean存在于request范圍內(nèi),此項設為“myBenas”,則在request.getAttribute("myBenas")就可以返回該Bean的實例。
2. classsName:和action元素對應的配置元素,默認為:org.apache.struts.action.ActionMapping.
3. forward:轉發(fā)的URL路徑。
4. include:指定包含的URL路徑。
5. input:輸入表單的URL路徑,當表單驗證失敗時,將把請求轉發(fā)到該URL。
6. name:指定和Action關聯(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ù)該配置項來決定用戶是否有權限調(diào)用Action權限。
10. scope:指定ActionForm Bean的存在范圍,可選取為request和session,默認為session。
11. type:指定Action類的完整類名。
12. unknown:如果此項為true,表示可以處理用戶發(fā)出的所有無效的Action URL,默認為false;
13. validate:指定是否要調(diào)用Action FormBean的validate方法,默認值為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是指局部的轉發(fā)路徑。global-forwards表示全局的轉發(fā)路徑。
?6. controller元素
該元素用于配置ActionServlet。它具有以下屬性。
1. bufferSize:指定上載文件的輸入緩沖大小,可選,默認為4096
2. className:指定和controller元素對應的配置類,默認為org.apache.struts.config.ControllerConfig
3. conentType:字符編碼,如果在Action和JSP網(wǎng)頁中設置了,則覆蓋該設置。
4. locale:指定是否把Locale對象保存到當前用戶的session中,默認值為false.
5. processorClass:指定負責請求的java類完整路徑。
6. tempDir:指定處理文件的臨時工作目錄,如果此項沒有設置,將采用Servlet容器為web應用分配的臨時工作目錄。
7. nochache:如果為true:在響應結果中將加入特定的頭參數(shù):Pragma,Cache-Control和Expise,防止頁面被保存在客戶端的瀏覽器中,默認為false
如下:
<controller
contentType="text/html;charset="UTF-8""
locale="true"
processorClass="con.ok"/>
?7. message-resources元素
主要配置本地化消息文本,它具有以下屬性。
1. className:和message-resources元素對應的配置類,默認為org.apache.struts.config.MessageResourcesConfig。
2. factory:指定消息資源的工廠類,默認為:org.apache.struts.util.PropertyMessageResourcesFactory類
3. key:指定Resource Bundle存放的ServletContext對象中時采用的屬性Key,默認由Globals.MESSAGES_KEY定義的字符串常量,只允許一個Resource Bundle采用默認的屬性Key。
4. null:指定MessageSources類如何處理未知消息的key,如果為true,則返回空字符串,如果為false,則返回相關字串,默認為false
5. prameter:指定MessageSources的資源文件名,如果為:a.b.ApplicationResources,則實際對應的文件路徑為: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>
?后記,多模塊的配置,可以供多個應用應用不同的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文件中的保持一致!??!
?標簽庫 |
?說明 |
?HTML 標簽 | ?用來創(chuàng)建能夠和Struts 框架和其他相應的HTML 標簽交互的HTML 輸入表單 |
?Bean 標簽 | ?在訪問JavaBeans 及其屬性,以及定義一個新的bean 時使用 |
?Logic 標簽 | ?管理條件產(chǎn)生的輸出和對象集產(chǎn)生的循環(huán) |
?Template 標簽 | ?隨著Tiles框架包的出現(xiàn),此標記已開始減少使用 |
?Nested 標簽 | ?增強對其他的Struts 標簽的嵌套使用的能力 |
?屬性 |
?說明 |
?id | ?命名自定義標簽創(chuàng)建時的腳本變量名。 |
?name | ?指出關鍵字值,在該關鍵字下可以找到一個存在的bean 。如果給出了scope屬性,則僅僅在scope中查找。否則,根據(jù)標準的順序在各種scope中查找:(page, request, session, or application)。 |
?property | ?指出bean 中的某個屬性,可以在其中檢索值。如果沒有標明,則使用對象本身的值。 |
?scope | ?定義了Bean在哪個范圍(page, request, session, or application)中被查找。如果沒有標明按順序查找。腳本變量(見id)將在相同的范圍中創(chuàng)建。 |
Property="foo.bar.baz" 這相當于進行下面的調(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\"?>? ?如果你有上述一個標簽?,那么你的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相關聯(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>標簽
forward屬性:鏈接到一個global forward上;action屬性:鏈接到一個action mapping上;
href屬性:這個鏈接會轉發(fā)給控制器,由控制器做決定;page屬性:一個相對的鏈接。
用page屬性鏈接到action上:
??<html:link page="/html-link.do">
?? Linking with the page attribute.
?</html:link>
注意,上面的代碼中你不必指定web的關聯(lián)。相反的,如果你使用href屬性,你就必須像下面所示指出web的關聯(lián)(這里的關聯(lián)就是struts-exercise):
?<html:link href="/struts-exercise-taglib/html-link.do">
?? Using Href
?</html:link>
很明顯,當你在相同的web應用程序中做鏈接是,它比page屬性更加好。你也能用href在不同的服務器上創(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上,上面的代碼解析后的結果:
?<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的數(shù)目;multiple-默認為fales,表示不能多選,當設定為true時,property對應的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,相關內(nèi)容為 htmlselect.red=RED
<html:options>標簽,提供了一組<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屬性不被指定時,將使用表單相關的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>
<html:messages>的message屬性如果不設定為true,會輸出ActionErrors中所儲存的訊息,Error代表的是一個操作方面的錯誤,例如錯誤操作導致使用者名稱或密碼為空(當然也許也是故意的)。
<html:messages>的message屬性如果設定為true,會輸出ActionMessages中所儲存的訊息, Message表示一個提示訊息,也許使用者輸入了不正確的資訊,例如在輸入名稱與密碼時打錯了字,程式要提示使用者他們輸入了不正確的訊息。