struts2-開發(fā)指南Struts2內(nèi)容來源于googlecode_第1頁
struts2-開發(fā)指南Struts2內(nèi)容來源于googlecode_第2頁
struts2-開發(fā)指南Struts2內(nèi)容來源于googlecode_第3頁
struts2-開發(fā)指南Struts2內(nèi)容來源于googlecode_第4頁
struts2-開發(fā)指南Struts2內(nèi)容來源于googlecode_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

資 基 Struts2運(yùn)行環(huán)境和安裝說明 實(shí) 創(chuàng)建Struts2工 拷貝基礎(chǔ)包到工 Struts2在Action中 只需用到 獲得 Struts2的SStruts2表單 Struts2返回 Struts2返回 使用 Struts2驗(yàn)證框 創(chuàng)建xml內(nèi) Struts2 Struts2資ApacheStruts2OpensymphonyXWork/xworkOpensymphonyWebWorkStruts2運(yùn)行環(huán)境和安裝說明struts-VERSION-all.zip是完全版struts-VERSION-lib.zip是必要庫版2.1 Struts2Struts1Struts2=WebWork對(duì)比配置文件:Struts1配置文件放在WEB-INF/struts-config.xml(可定制)下;Struts2的配置文件要放在WEB-INF/classes下控制器:Struts1的控制器是一個(gè)ActionServlet類;Struts2動(dòng)作表單:Struts1的HTML表單對(duì)應(yīng)一個(gè)ActionForm類的實(shí)例,動(dòng)作類可對(duì)應(yīng)配置的ActionForm,操作ActionForm進(jìn)行填充數(shù)據(jù)傳輸對(duì)象;Struts2的HTML表單直接映射成POJO,動(dòng)作類中可直接POJO,操作對(duì)POJO的驗(yàn)證。何一個(gè)POJO,但是最好是繼承ActionSupport類?。JSPStruts2OGNL來顯示各種對(duì)象模型,JSP自帶JSTLELEL常用來補(bǔ)充表單庫?。為什么最好是繼承ActionSupport類?Struts2的具體有哪些ActionSupport類的作用struts2不要求我們自己設(shè)計(jì)的action類繼承任何的struts基類struts接口,但是我們?yōu)榱朔奖銓?shí)現(xiàn)我們自己的action,大多數(shù)情況下都會(huì)繼承com.opensymphony.xwork2.ActionSupport類,并重寫此類里的publicStringexecute()throwsException方法。因?yàn)榇祟愔袑?shí)現(xiàn)了很多的實(shí)用借口,提供了很多默認(rèn)方法,這些默認(rèn)方法包括信息的方法、默認(rèn)的處理用戶請(qǐng)求的方法等,這樣可以大大的簡化Acion的開發(fā)。Struts2中通常直Action來封裝HTTP請(qǐng)求參數(shù),因此,Action類里還應(yīng)該包含與請(qǐng)求參數(shù)對(duì)應(yīng)的屬性,并且為屬性提供對(duì)應(yīng)的gettersetter方法。Struts2的具體有哪些:詳見Struts2工程Struts2到 找到struts-\apps\struts2-blank-.war解壓在web.xml中添加Struts2的過濾器(2.0和2.1的過濾器不同<!--<!--Struts2.1--<filter-name>struts2</filter-<filter- <filter-name>struts2</filter-<url-pattern>/*</url-</filter- <!--Struts2.0--<filter-name>struts2</filter-<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-<filter- <filter-name>struts2</filter-<url-pattern>/*</url-</filter- 拷貝基礎(chǔ)包到工程--freemarker-2.3.15.jar--模板引擎包c(diǎn)ommons-fileupload-1.2.1.jar--文件上傳包拷貝struts.xml(struts2-blank-\WEB-INF\src\java)到 <!--關(guān)閉動(dòng)態(tài)方法調(diào)用關(guān)閉action名+感嘆號(hào)+方法名進(jìn)行方法調(diào)用<constantname="struts.enable.DynamicMethodInvocation"value="false"<constantname="struts.devMode"value="false"<includeextends繼承參數(shù),必須要有個(gè).<package o" o"extends="struts-<!--name為 名稱--<action oWorld" 寫Action類(可以不繼承任何類,也可以繼承publicoActionprivateString默認(rèn)執(zhí)行方法publicString{System.out.println("world:"+//SUCCESS是result即result中沒有寫name, returnpublicpublicString{return}publicvoidsetMessage(String{this.message=}}Action接口,里面定義了一些返回的字符串常量(SUCCESS,INPUT,ERROR...),execute方法.ActionSupport類,Actioin接口的默認(rèn)實(shí)現(xiàn) oWorld.jsp頁面,message參<%@<%@taglibprefix="s"uri="/struts-tags"<!-- <h2>Message:<s:propertyoAction,帶message參數(shù) Struts2在Action中只需用到ActionContextctx=ActionContext.getContext();ctx.put("request","request");Map<String,Object>session=ctx.getSession();session.put("session","session");Map<String,Object>appliction=代碼獲得HttpServletRequestHttpServletRequestrequest=ServletActionContext.getRequest();HttpServletResponseresponse=ServletActionContext.getResponse();HttpSessionsession=request.getSession();ServletContextservletContext=接口獲得如果有多個(gè)Action需要用到request,可以寫個(gè)Action繼承接口,使用request的Action繼承再它/*/*繼承ServletRequestAware(獲得request),ServletResponseAware(獲得response),ServletContextAware(獲得ServletContext),SessionAware(獲得Session)接口*/publicclassFormActionimplementsServletRequestAware,ServletResponseAware{privateHttpServletRequestrequest;privateHttpServletResponseresponse; publicvoidsetServletRequest(HttpServletRequest{this.request=}publicvoidsetServletResponse(HttpServletResponse{this.response=}}//Struts2//Struts2中默 的是Action中execute方中的execute方法publicString{return}(只要在url中指定方法名稱就可以了.如:要oAction中的add()方法url:(加!和方法名字struts.xml中配置可以關(guān)閉動(dòng)態(tài)方法(默認(rèn)是激活,可能會(huì)讓用戶方法沒有公開的方法,最好不用)--><constantname="struts.enable.DynamicMethodInvocation"value="false" 配置多個(gè)方<!--FormAction中的add<actionname="userActionAdd"class="com.struts2.form.FormAction"<!-- FormAction<actionname="userActionUpdate"class="com.struts2.form.FormAction" 使用通配符調(diào)用多個(gè)<!-name="*_*"class="com.struts2.form.{1}Actionmethod="{2}"url:user_list.action就是調(diào)用userAction中l(wèi)ist方法.method="{2}"->list(第二個(gè)*對(duì)應(yīng)的字符串method="{3}"->abd(第三個(gè)*對(duì)應(yīng)的字符串--<actionname="userAction_*"class="com.struts2.form.FormAction"

默認(rèn)類型,FreeMarker的集成把HTTP標(biāo)頭發(fā)送回用戶重定向到另一個(gè)URLRedirectAction(redirectAction)重定向到另一個(gè)

把一個(gè)InputStream流發(fā)送給瀏覽器( 用于與Velocity技術(shù)的集成發(fā)送普通文本,通常用來顯示JSP頁面的<!-<!-Chain用途是構(gòu)成一條動(dòng)作鏈:前一個(gè)動(dòng)作把控制權(quán)轉(zhuǎn)交給后一個(gè)動(dòng)作,而前一個(gè)動(dòng)作的狀態(tài)在后一個(gè)動(dòng)作里仍保持.動(dòng)作鏈能不用就不用,有可能把一套連續(xù)動(dòng)作弄成一團(tuán)亂--<packagename="package1"extends="struts-<actionname="action1"<result<actionname="action2"<result<param<param<packagename="package2"namespace="/namespace2"extends="struts-<actionname="action3"<result<!--或者<result<param<action<result<param<!-<!-重定參數(shù):location:重定向的 表明是否把location參數(shù)的值視為一個(gè)OGNL表達(dá)式來解釋,默認(rèn)值為--<actionname="..."<resultname="success"內(nèi)部資源<!-外部資源(如果需要使用&和+之類的特殊字符必須使用轉(zhuǎn)義序列.如:&改 轉(zhuǎn)成--<!-<!-重定向到一個(gè)參數(shù):actionName:指定重定向Action的名 名空間(沒有此參數(shù),與本action同一個(gè)命名空間--<result或者<result<param參數(shù)<param<param<param<actionname="source_show"<resultname="success" Struts2_OGNL表達(dá)Struts2不支持el表達(dá)式,只能使用把各種映射關(guān)系(一些Map類型的對(duì)象)壓入OGNL表達(dá)式加上一個(gè)前綴 Context Object2 數(shù)//String[]colorsblue","green","red"}; 長3. 第一個(gè)元 List{"a","b","c"}//創(chuàng)建一個(gè)由3String構(gòu)成的4. cities["CA"]或者 cities中key為CA的元 %{}里面的表達(dá)式會(huì)被求值(%{#request.user.age>40}->trueorfalse,%{1+6}-<p>賦值,取值<!--頁面定義變量(本頁賦值用name要加#取值),default認(rèn)值賦值字符串要加'',不然是去Action對(duì)應(yīng)的變量.value="test"->在Action中找test變量--><s:setid="test1"<!--#request.get('javax.servlet.forward.context_path')必須經(jīng)過轉(zhuǎn)發(fā)到j(luò)sp才有值,直接jsp無值-- s:<s:propertyvalue="#msg"default="Struts2"/><br/><s:property--<s:if<s:if<div>中年人<s:elseif<div>年輕<p><b>iterator:</b>對(duì)集合迭代迭代斷是否為<s:if

<s:iteratorvalue="#request.userList"id="u"status="st">index:<s:propertyvalue="#st.index+1"/>&;是否第一個(gè):<s:propertyvalue="#st.first"/>&;是否偶數(shù):<s:propertyvalue="#st.even"/>&;日期<s:datename="#u.birthday"format="yyyy-MM-dd迭代<s:if<s:iteratorvalue="#request.userMap"id="map"status="st">index:<s:propertyvalue="#st.index+1"/>&;是否第一個(gè):<s:propertyvalue="#st.first"/>&;是否偶數(shù):<s:propertyvalue="#st.even"/>&;日期HH:mm:ss"/>&

<p><b>append:</b>對(duì)多個(gè)集合進(jìn)行合并合List<s:append<s:param<s:param<s:iteratorvalue="#newList"id="u"status="st">是否第一個(gè):<s:propertyvalue="#st.first"/>&;是否偶數(shù):<s:propertyvalue="#st.even"/>&;<s:datename="#u.birthday"format="yyyy-MM-ddHH:mm:ss"/>&<s:append<s:param<s:param<s:iteratorvalue="#newListMap"id="map"status="st">是否第一個(gè):<s:propertyvalue="#st.first"/>&;是否偶數(shù):<s:propertyvalue="#st.even"/>&;

顯示棧里的參數(shù)信息Struts2表單<!-<!-action="userAction!%{tip}"動(dòng)態(tài)方法tip為Action中的變量submit--<s:formaction="userAction"namespace="/form"<!--userBean.id為Action中屬userBean中id值<s:hidden<s:textfieldname="userB"label="用戶名"<s:textfieldname="userBean.age" "<s:textfieldname="userBean.birthday"label="生日"<s:param<!- 不能回<s:passwordname="userBean.password" "<s:textareaname="userBean.des"label="描述"cols="35"<!--這種checkbox顯示出來是一行只有一個(gè)<s:iterator<s:checkboxname="userBean.likes"label="%{name}"--這種是一行多<s:checkboxlistlist="likeList"name="userBean.likes"listKey="id"listValue="name" <s:selectlist="likeList"listKey="id"listValue="name"headerKey="-1"headerValue="請(qǐng)選 --<!--value="1"設(shè)置默認(rèn),但是好像設(shè)置了不能回填<s:radiolist="#{'1':'男','2':'女'}" "<s:submitvalue="%{tip}"id="submitBut"Struts2文件上傳文件上傳jsp<s:form<s:formaction="fileAction"namespace="/file"method="POST"<!--name 對(duì)應(yīng)的參數(shù)名稱--<s:filename="files"<s:filename="files"<s:filename="files"<s:submitvalue="提交用//名稱要與jsp中的name相同(三個(gè)變量都要get,set)privateFile[]files;//要以File[]變量privateString[]//要以File[]變量privateString[]filesContentType;privateServletContextservletContext;//Action調(diào)用的上傳文件方publicStringexecute()ServletContextservletContextStringdataDir=servletContext.getRealPath("/file/upload");for(inti=0;i<files.length;i++)FilesaveFile=newFile(dataDir,filesFileName[i]);}return}配置上傳文件臨時(shí)文件夾(在struts.xml中配置<constantname="struts.multipart.saveDir" 文件url<a<a struts.xml配<actionname="fileAction" <!--typestream應(yīng)StreamResult處<resultname="down"<!-不管實(shí)際類型, 文件ContentType統(tǒng)一指定為application/octet-默認(rèn)為--<!-默認(rèn)就是inputStream,它將會(huì)指示StreamResultinputName屬性值getter法比如這里就是getInputStream()來獲 文件的內(nèi)容,意味著你的Action要有這個(gè)法--<param<!-默認(rèn)為 打開),設(shè)置為 ent將會(huì)告訴瀏覽 該文件,filename 件保有存時(shí)的文件名,若未指定將會(huì)是以瀏覽的頁面名作為文件名,如以作為文件名這這里使用的是動(dòng)態(tài)文件名,${fileName},它將通過Action的getFileName()獲名--<param <param//Action//Action調(diào)用 文件方publicStringdown()return}//獲 文件的內(nèi)容,可以直接讀入一個(gè)物理文件或從數(shù)據(jù)庫中獲取內(nèi)publicInputStreamgetInputStream()throwsExceptionStringdir=servletContext.getRealPath("/file/upload");Filefile=newFile(dir,"icon.png");if(file.exists()) 文returnnew//和Servlet中不一樣,這里我們不需對(duì)輸出的中文轉(zhuǎn)碼為ISO8859-//將內(nèi)容(Struts2文 測(cè)試)直接寫入文件 的文件名必須是文本(txt)類//returnnewByteArrayInputStream("Struts2文 測(cè)試}return}//對(duì)于配置中的${fileName},獲 保存時(shí)的文件publicStringgetFileName(){StringfileName="圖標(biāo).png";try{//中文文件名也是需要轉(zhuǎn)碼為ISO8859-1,否則亂碼returnnewString(fileName.getBytes"ISO8859-1");}catch(UnsupportedEncodingException{return}}Struts21.1.jsonplugin2.struts.xmlpackageextends="json-<packagename="json"namespace="/json"extends="json-3.resultget開頭的方法2.struts.xmlpackageextends="json-<packagename="json"namespace="/json"extends="json-3.resultget開頭的方法<resulttype="json"user.id屬性<resulttype="json"<paramname="includeProperties">user屬性<resulttype="json"<paramname="excludeProperties">根對(duì)象只包含user<result<paramname="root">需要在配置時(shí)指定ignoreHierarchy為false:--><result<param5.5.在action中賦值,返回對(duì)應(yīng)的result在屬性get方法上面加@JSON(name="newName")json中的名稱@JSON(format="yyyy-MM-dd")格式化日期Struts2////直接調(diào)用responseOut方publicvoidresponseOut()throws{StringBuildersb=newsb.append("<?xmlversion=\"1.0\"encoding=\"UTF-8\"?>"); <user //HttpServletResponseresponse=response.setHeader("Cache-Control","no-cache");PrintWriterout=response.getWriter();Struts2////要添加publicclassUserBean{privateLongid;privateStringname;privateStringpassword;privateintage;privateDatebirthday;privateLongsex;privateSet<Long>likes;privateStringdes}publicclassLikeBeanprivateLongid;privateStringname;}publicclass//屬性要生成privateStringprivateUserBeanuserBean;privateList<LikeBean>likeList;privateList<UserBean>publicStringlist(){userList=newArrayList<UserBean>();userList.add(newUserBean("abc",19,newDate()));userList.add(newUserBean("def",70,newDate()));userList.add(newUserBean("ghi",40,newDate()));return"list";}//到添加頁publicStringlikeList=newArrayList<LikeBean>();likeList.add(newLikeBean(newLong(1),"上網(wǎng)"));likeList.add(newLikeBean(newLong(2),"讀書"));likeList.add(newLikeBean(newLong(3),"游戲tip="add";return"info";}//添加方法,Struts2會(huì)自動(dòng)把對(duì)應(yīng)的值賦值給userBeanpublicStringadd(){return"toList";}publicStringtoUpdate(){likeList=newArrayList<LikeBean>();likeList.add(newLikeBean(newLong(1),"上網(wǎng)"));likeList.add(newLikeBean(newLong(2),"讀書"));likeList.add(newLikeBean(newLong(3),"游戲tip=System.out.println("updatename:"+userBean.getName());userBean=newUserBean("update",100,newDate());userBean.setId(newLong(101));userBean.setSex(newLong(2));userBean.setDes("Struts2用戶");Set<Long>likes=newHashSet<Long>();likes.add(newLong(2));likes.add(newLong(3));return"info";}//更新方publicStringreturn"toList";}//刪除方publicStringSystem.out.println("delname:"+userBean.getName());return"toList";}}struts.xml<packagename="form"namespace="/form"extends="struts-<!--使用通配符調(diào)用多個(gè)方法,method為*對(duì)應(yīng)的字符串--><actionname="userAction_*"class="com.struts2.form.FormAction"<!--方法返回的字符串對(duì)應(yīng)name,再轉(zhuǎn)發(fā)到頁面--><result<result<!--重定向Action,可以有Action名字和空間,參數(shù)--><resultname="toList"<!--空間參數(shù),不寫代表和當(dāng)前Action同一個(gè)空<param--jspjsp<!--重定向Action的名稱--><param<!--url帶的參數(shù),${userB}是動(dòng)態(tài)參數(shù),值為Action的屬性u(píng)serBean中name的值--><param<paramlist(列表頁面<!--<!--添 --<%@taglibprefix="s"uri="/struts-tags"<div><ahref="${pageContext.request.contextPath}/form/userAction_toAdd.action">添加斷用戶是否為空<s:if<div>用戶列表<!--遍歷用戶--><s:iteratorvalue="#request.userList"id="u"<s:property <s:property <s:property <!--格式化日期--><s:datename="#u.birthday"format="yyyy-MM-dd href="${pageContext.request.contextPath}/form/userAction_toUpdate.action?userB=${>修改 href="${pageContext.request.contextPath}/form/userAction_delete.action?userB=${>刪除</a><div>無用戶info.jsp(添加和修改頁面<!--<!--添 --<%@taglibprefix="s"uri="/struts-tags"<!--顯示標(biāo)記(添加/修改)<s:property<!--action="userAction_%{tip}"tip為Action中的標(biāo)記變量submit不加method<s:formaction="userAction"namespace="/form"<!--userBean.id為Action中屬性u(píng)serBean中id的值--><s:hidden<s:textfieldname="userB"label="用戶名"<s:textfieldname="userBean.age" "<s:textfieldname="userBean.birthday"label="生日"<s:paramname="value"><s:datename="userBean.birthday"format="yyyy-MM-<!- <s:passwordname="userBean.password" "<s:textareaname="userBean.des"label="描述"cols="35"<!--這種checkbox顯示出來是一行只有一個(gè)<s:iterator<s:checkboxname="userBean.likes"label="%{name}"--這種是一行多個(gè)<s:checkboxlistlist="likeList"name="userBean.likes"listKey="id"listValue="name"label="<!--<s:selectlist="likeList"listKey="id"listValue="name"headerKey="-1"headerValue="--value="1<s:radiolist="#{'1':'男','2':'女'}" "<s:submitvalue="%{tip}"id="submitBut"Action置中一定要設(shè)置input回頁面添加驗(yàn)證只要?jiǎng)?chuàng)建驗(yàn)證的xml文件Actioninput返回頁面添加驗(yàn)證只要?jiǎng)?chuàng)建驗(yàn)證的xml文件創(chuàng)建xml文件名Action同包下,創(chuàng)建:Action類名-如:ValidateAction創(chuàng)建ValidateAction-<!--每<!--每個(gè)方法單獨(dú)配置一個(gè)Action--><!--在Action同包下,創(chuàng)建:Action類名-action方法配置名稱-validation.xml--><actionname="validateAdd"class="com.struts2.validator.ValidateAction"<!--要?jiǎng)?chuàng)建ValidateAction-validateAdd-validation.xml-->通配符配置<!--在Action同包下,創(chuàng)建:Action類名-action方法對(duì)應(yīng)的名稱-validation.xml--><actionname="validate_*"class="com.struts2.validator.ValidateAction"<!--要?jiǎng)?chuàng)建ValidateAction-validate_add-validation.xml,validate_add 這個(gè)action方法的路徑--注注意要驗(yàn)證的方法不能叫這樣配置在form表單中要在<s:formaction="validate_add">中action寫好名稱,不能寫action="validate_",然后<s:submitvalue="提交"method="add"/>這樣會(huì)找不到對(duì)應(yīng)的配如果驗(yàn)證出錯(cuò),返回input頁面時(shí),那些存在ValueStack中的值會(huì)丟失,可以將Action實(shí)現(xiàn)Preparable接口,然后prepare()方法里初始化添加頁面需要的值.如果使用Preparable接口,必須在action配置中添加<interceptor-refname="paramsPrepareParamsStack"這樣prepare()才能得到form提交的參創(chuàng)建xml內(nèi)容<!DOCTYPEvalidatorsPUBLIC<!DOCTYPEvalidatorsPUBLIC"-//OpenSymphonyGroup//XWorkValidator1.0.2//EN" /xwork/xwork-validator-<!--要驗(yàn)證<!--要驗(yàn)證Action中UserBean的id字段,name="userBean.id"(userBean為Action<field<!--type要驗(yàn)證的類型,short-circuit(默認(rèn)false),truerequiredstring失敗了 就不驗(yàn)證了.--<!--field-validator下面可以有多個(gè)param元素,但是最多只能有一個(gè)message<field-validator<param<message>Pleaseentera</field-<field-validator Invalid</field-Struts內(nèi)建驗(yàn)證程序(type的值保證字段的值不是空值null.空字符串不是空值<field<field<field-validator<message>Pleaseenterauser</field-param:trim(boolean)->true->去除前后空格<field<field<field-validator<param<message>Pleaseenterauser</field-<field<field-validator<param<message><message>Pleaseentera</field-param:min(int);max(int)<field<field<field-validator<param<param<message>year:1999-</field-<field<field<field-validator<paramname="min">1999-01-<paramname="max">2010-01-<message>birthday:1999-</field-給定的String值是否是一個(gè)電子<field<field<field-validator 給定的String值是否是一個(gè)合法的URL(要有前綴<field<field<field-validator<message>Invalid</field-驗(yàn)證給定字段是否滿足一個(gè)OGNL表達(dá)式區(qū)別 不是一個(gè)字段驗(yàn)證程序,失敗時(shí)將生成一個(gè)動(dòng)作錯(cuò)誤.(JSP中調(diào)<s:actionerror/>才顯示出錯(cuò)信息fieldexpression是一個(gè)字段驗(yàn)證程序,失敗時(shí)將拋出一個(gè)字段錯(cuò)誤.(對(duì)字段驗(yàn)證)param:expression(String)OGNL表達(dá)式publicpublicclassExpressionTestAction//屬性生成get,setprivateintmin;privateintmax;}<validator<paramname="expression">max>minumtemperaturemustbegreaterthanMinimum<!--jsp--publicpublicclassFieldExpressionTestAction//屬性生成get,setprivateintmin;privateintmax;}<field<field-validator<paramname="expression">max>minumtemperaturemustbegreaterthanMinimum</field-publicclassUserBean//屬性get,setprivateStringname;privateintage;}//UserBean-validation.xml(和UserBean放在同一個(gè)包中<field<field-validator<message>用戶名必須</field-<field<field-validator<param<param<message>Agemustbebetween18and</field-//Action的<!--userBean變量名--><field<field-validator<!--message會(huì)和UserBean驗(yàn)證中的message一起顯示--><message>用戶:<</</field-如果另一個(gè)Action對(duì)UserBean使用另一個(gè)標(biāo)準(zhǔn)的驗(yàn)證,可以創(chuàng)建新的驗(yàn)證文件//UserBean-specific-//UserBean-specific-之前的驗(yàn)證不同<field<field-validator<param<param<message>Agemustbebetween30and</field-//另一個(gè)Action的<field<field-validator<!--xml中擴(kuò)展的名字,執(zhí)行UserBean-specific-validation.xml的驗(yàn)證--><param<message>用戶1:</</field-檢查對(duì)某個(gè)屬性進(jìn)行類型轉(zhuǎn)換是否會(huì)導(dǎo)致一個(gè)轉(zhuǎn)換錯(cuò)誤<field<field<field-validatorAnagemustbean</field-驗(yàn)證一個(gè)非空的字段值是不是足夠的長度<field<field<field-validator<param<param<message><message>length:6-</field-給定的值是否與一個(gè)給定的正則表達(dá)式匹<field<field<field-validator<param<![CDATA[\d\d\d\-\d\d\d\-Invalidphonenumberorinvalid</field-actionActionSupport類已經(jīng)實(shí)現(xiàn)了這個(gè)接口////繼承publicclassUserextendsActionSupport//屬性privateStringuserName;privateStringprivatestaticList<String>userNames=newArrayList<String>();static{}//驗(yàn)證方publicvoidvalidate() //添加出錯(cuò)信addFieldError("userName","'"+userName+"'hasbeen}}}}自定義驗(yàn)證類要?jiǎng)?chuàng)建一個(gè)普通的驗(yàn)證程序(非字段驗(yàn)證程序),擴(kuò)展ValidatorSupport類.驗(yàn)證失敗要從方法addActionError方法要?jiǎng)?chuàng)建一個(gè)字段驗(yàn)證程序,擴(kuò)展FieldValidatorSupport類.驗(yàn)證失敗要從validate方法addFieldError方法如果要能接受參數(shù),要在類中定義一個(gè)相應(yīng)的屬性,并生 編寫publicpublicclassStrongPasswordValidatorextendsFieldValidatorSupport//屬privateintminLength=-publicvoidsetMinLength(int{this.minLength=}publicint{return}//驗(yàn)證方publicvoidvalidate(Objectobject)throws{StringfieldName=Stringvalue=(String)getFieldValue(fieldName,object);if(value==null||value.length()<=0){//usearequiredvalidatorforthese}if((minLength>-1)&&(value.length()<{addFieldError(fieldName,}elseif{addFieldError(fieldName,}}privatestaticfinalStringGROUP_1=privatestaticfinalStringGROUP_2="ABCDEFGHIJKLMNOPQRSTUVWXYZ";privatestaticfinalStringGROUP_3=" protectedbooleanisPasswordStrong(String{booleanok1=false;booleanok2=false;booleanbooleanok3=intlength=password.length();for(inti=0;i<length;i++){if(ok1&&ok2&&ok3){}Stringcharacter=password.substring(i,i+1);System.out.println("character:"+character);if{ok1=true;}if{ok2=true;}if{ok3=}}return(ok1&&ok2&&}}xml

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論