給的java視頻-就業(yè)、是mvc基礎(chǔ)其他框架比如struts1struts_第1頁(yè)
給的java視頻-就業(yè)、是mvc基礎(chǔ)其他框架比如struts1struts_第2頁(yè)
給的java視頻-就業(yè)、是mvc基礎(chǔ)其他框架比如struts1struts_第3頁(yè)
給的java視頻-就業(yè)、是mvc基礎(chǔ)其他框架比如struts1struts_第4頁(yè)
給的java視頻-就業(yè)、是mvc基礎(chǔ)其他框架比如struts1struts_第5頁(yè)
已閱讀5頁(yè),還剩77頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

.Struts2MvcServlet3servlet進(jìn)行封裝。Struts2servlet中封裝以后得到的Servletweb.xml內(nèi)容過(guò)于繁多。3servlet中,doGet方法和doPost方法有HttpServletRequest和HttpServletResponseservlet中作重構(gòu)servletservlet進(jìn)行重構(gòu),使其開(kāi)發(fā)起來(lái)更簡(jiǎn)4actionHttpServletRequestHttpServletResponse參數(shù)傳5、在過(guò)濾器中通過(guò)java的反射機(jī)制調(diào)用action。6、詳細(xì)過(guò)程參照cn. .action包中的內(nèi)容Struts2介1struts2apachestruts4、struts2的器為mvc框架注入了全新的概念。Struts2入jarlib,jarlibclasspath中,jar創(chuàng) packagepackageimportpublicpublicStringexecute()throwsException//TODOAuto-generatedmethodstub oworldaction");return"success";}ThisisThisismyJSPpage.base命名空間下 srcweb.xml <a1webinit方法。在這里回顧3dtd約束是一樣的,所以如果這三個(gè)文件有相同的項(xiàng),4struts.xmlsrcStruts2基本配Extends1、上述內(nèi)容中struts.xml文件中有的包都繼承了struts-default(在struts-defult.xml文件中所以程序員開(kāi)發(fā)的action具有struts-default包中所有類(lèi)的功能。2struts-default.xml文件在web4、可以做這樣的嘗試:把extends=”struts-default”改為extends=””會(huì)怎么struts.xml<package<packagename="test"namespace="/test"結(jié)果,并且命名空間和base包中 ,struts2extens=”struts-default”會(huì)出現(xiàn)什么樣的結(jié)構(gòu),publicclassActionSupportimplementsAction,Validateable,ValidationAware,TextProvider,LocaleProvider,Serializable{AdefaultimplementationthatdoesnothinganreturnsSubclassesshouldoverridethismethodtoprovidetheirbusinessSeealso{@link@returnreturns{@link@throwsExceptioncanbethrownbypublicStringexecute()throwsException 代碼段一說(shuō)明了ActionSupport也實(shí)現(xiàn)了Action接口(以前寫(xiě)的類(lèi)實(shí)現(xiàn)了Action接口) 代碼段二說(shuō)明如果程序員寫(xiě)自己的action繼承了ActionSupport,需要重新覆蓋execute方法即可。3 <action<result可以看到 ActionSupport這個(gè)類(lèi)。所以 中的class屬性可以不寫(xiě)<include<include 在說(shuō) 用法的時(shí)候,我們了這樣一url:。如果我們把url改成這樣的url:,行嗎?答案也是可以的。果這樣呢可以嗎?這樣就為什么1、struts2會(huì)在當(dāng)前名空間下查找相應(yīng)的 3、如果 4、如果直接的就是根 結(jié)果類(lèi)1actionString類(lèi)型的值,struts一次請(qǐng)求返回什么值是由2action元素的配置都必須有resultresult對(duì)action的返回值。3Resultname:結(jié)果的名字,和actionsuccess;type:響應(yīng)結(jié)果類(lèi)型,默認(rèn)值為dispatcher. 110Dispatcher說(shuō)例Action參照:DispatcherAction<result<result<paramRedirect說(shuō)Redirectredirect類(lèi)型,則在reuqest作用域的值不能傳遞到前例說(shuō)1action2actionNameaction例第第<resultname="success"<resultname="success"action如果不寫(xiě),默認(rèn)就是請(qǐng)求的action--<paramname="actionName">Action原型模servletservletservlet是單例模式。如果把一servlet屬性中,則要考慮線程安全的問(wèn)題。Actionstruts2框架packagepackageimportpublicclassMoreInstanceActionextendsActionSupport{publicMoreInstanceAction(){System.out.println("createnew}publicStringexecute(){System.out.println("moreinstanceaction");returnSUCCESS;}}<packagename="moreinstance"<action 通配Execute1、有一個(gè)action為Action3、但是在action中方法的只有一個(gè)execute方4、所以要想完成這樣的功能,有法就是在url中加參數(shù)。action中的代碼可能是這樣的:publicclassPatternActionextendsActionSupport{privateStringmethod;publicStringexecute(){}else}else}return}methodActionadd方法<ahref="${pageContext.request.contextPath}/pattern/patternAction.action">測(cè)<packagename="pattern"namespace="/pattern"<actionname="patternAction" publicStringadd(){return}樣就可以了。但是這種寫(xiě)法有弊端。如果aciton5struts的配5個(gè)配置,這樣會(huì)導(dǎo)致配置文件的篇幅很大。而且重復(fù)性也很大PatternActionadd方法<action 需求:需求:a_add.action、b_add.action、c_add.actionPatternAction的adda_addb_addc_addPatternAction的add<actionname="a_add" <actionname="b_add" <actionname="c_add" <actionname="*_add" 請(qǐng)請(qǐng) Action和StudentAction的add方請(qǐng) Action的add方法>studentActionadd方法 teacherAction的add方法</a> teacherActionupdate方法</a>teacherActiondelete方法</a>teacherActionquery方法</a><actionname="teacherAction_*"請(qǐng)求請(qǐng)求請(qǐng)求 說(shuō)明:*method的屬性值保持一致。<actionname="*_*" 全局結(jié)果類(lèi)struts2中提供了全局頁(yè)面的配置方法。<result這個(gè)配置必須寫(xiě)在action配置的上面。dtdactionresultnamesuccess值,順序?yàn)閤mlJavaStruts2serlvet接struts2acitonserlvet的松耦合,這點(diǎn)是非常HttpServletRequest,HttpServletSession,ServletContext有些struts2serlvetAPI相結(jié)合。Struts2中提供了ServletActionContext類(lèi)servlet的apiservletion">測(cè)試struts2中 publicclassServletActionextendsActionSupportimplementsServletContextAware,privateHttpServletRequestrequest;privateMapsessionMap;privateServletContextpublicStringtestServletAPI2(){return}publicvoidsetServletContext(ServletContextcontext)//TODOAuto-generatedmethodstubthis.servletContext=context;}publicvoidsetSession(Map<String,Object>session)//TODOAuto-generatedmethodstubthis.sessionMap=session;}publicvoidsetServletRequest(HttpServletRequestrequest)//TODOAuto-generatedmethodstubthis.request=request;}} admin用戶登入,就不能執(zhí)行該方法。publicStringtestAccess(){returnreturnfailed";}}6actionaction中動(dòng)態(tài)可以實(shí)現(xiàn)。請(qǐng)參見(jiàn)cn..struts.jdkproxy包下的類(lèi)在struts2中,用器(interceptor)完美的實(shí)現(xiàn)了這一需求。在struts2中,內(nèi)置了很多器,在struts-default.xml文件中可以看出。用戶還可以自定義 器棧和使用器器器<interceptor -- --struts2內(nèi)部 器--publicpublicclassPrivilegeInterceptorimplementspublicvoiddestroy()//TODOAuto-generatedmethod}publicvoidinit()//TODOAuto-generatedmethod}publicStringintercept(ActionInvocationinvocation)throwsException//TODOAuto-generatedmethodstub 的//OgnlStringmethod=invocation.invoke();return}}1init、interceptdestroy驗(yàn)publicclassValidateActionextendsActionSupport{privateStringusername;privateString//setgetreturn"success";}publicStringaaa(){return"success";}publicvoidvalidate(){","}this.addFieldError("password"," }elseif(this.password.length()<6){this.addFieldError("password"," 6個(gè)字符");}}}AdefaultimplementationthatvalidatesSubclassesshouldoverridethismethodtoprovidepublicvoidvalidate()}String為要驗(yàn)證的字段List<String>封裝錯(cuò)誤信息validate是針對(duì)action中所有的方法進(jìn)行驗(yàn)證。如果想針對(duì)某一個(gè)方法進(jìn)行驗(yàn)證,應(yīng)該把validate方法改為validate方法名稱(chēng)(方法名稱(chēng)的第一個(gè)字母大寫(xiě))。 一個(gè)系統(tǒng)的就是根據(jù)操作系統(tǒng)的語(yǔ)言,頁(yè)面上的表現(xiàn)形式發(fā)生相應(yīng)資源文件名規(guī)則默認(rèn)名為根據(jù)語(yǔ)言名為:

3srcvalue的值可以直接寫(xiě),如果在4resourceresource<table<td><s:text<td><s:textfield<td><s:text 1、標(biāo)紅色部分的是要從資源文件中找的內(nèi)容。item.usernameitem.passwordkey2、也可以利用%{getText('item.username')}方式來(lái)獲取資源。采取的是OGNL從源代碼可以看出ActionSupport實(shí)現(xiàn)了TextProvider接口。Providesaccessto{@linkResourceBundle}sandtheirunderlyingtextmessages.意思是說(shuō)提供了 資源文件的 TextProvider中提供了getText方法,根據(jù)key可以得到value。action可以利用ActionSupportgetText()valuepublicclassLoginActionextendsActionSupport{publicStringlogin(){Stringusername=this.getText("item.username");Stringpassword=this.getText("item.password");return}}是一個(gè)開(kāi)源的項(xiàng)目,struts2OGNLserlvetel表達(dá)式的作用是一樣的。OGNL表達(dá)式有下面以下特點(diǎn):2、支持類(lèi)靜態(tài)的方法調(diào)用和值,表達(dá)式的格式為@[方法名|值名]price=100,discount=0.8,calculatePrice()80;4、OGNL上下文(OGNLcontext)和ActionContextelservletel1ognl1ValueStack是一個(gè)struts2中使用OGNL表達(dá)式實(shí)際上是使用ValueStack對(duì)象。其中保存了當(dāng)前action對(duì)象和其他相關(guān)對(duì)象。從圖上可以看出OgnlValueStackOgnlContext從上述可以看出,OgnlContextMap。所以可以看出_valuesMap屬性。而運(yùn)行一下下面的代碼就可以看到:////request域中設(shè)置一個(gè)參數(shù)//session域中設(shè)置一個(gè)參數(shù)//session域中設(shè)置一個(gè)參數(shù)//OGNL在_valuesmap自己寫(xiě)的request{{ }request作用域的值被放入到了_valuesrequest域中。com.opensymphony.xwork2.ActionContext.session的從上圖中可以看出在程序中被加入到session的值在_values中也從圖中可以看出_rootCompoundRoot類(lèi),從類(lèi)的組織結(jié)構(gòu)圖中可以看ArrayList類(lèi),也就是說(shuō)這個(gè)類(lèi)具有集合的功能。action。2Context中的_rootValueStackroot(對(duì)象棧)里的數(shù)據(jù)結(jié)構(gòu)和值3OgnlContext就可以完成對(duì)數(shù)據(jù)的存和取Struts會(huì)把動(dòng)作和相關(guān)的對(duì)象壓入到ObjectStackStrutsContextMapMap////map中存放數(shù)據(jù)ServletActionContext.getRequest().setAttribute("req_psw","req_psw");ActionContext.getContext().getSession().put("session_usernamesession_username");ActionContext.getContext().getSession().put("session_psw","session_psw");*//root,把一個(gè)對(duì)象壓入到root valueStack.getRoot().add(newStudent());ArrayList中的add方法二:先得到rootadd(index,Object)root valueStack.getRoot().add(0,new1”msg”和”msg_object”Map2Map放入到對(duì)象棧中。** Push方法把新創(chuàng)建 OGNL1OGNLContext2、當(dāng)struts2接受一個(gè)請(qǐng)求時(shí),會(huì)迅速創(chuàng)建ActionContext,ValueStack,action。然后把a(bǔ)ction壓入到值棧中。所以action的實(shí)例變量可以被ognl。所以利用ognl表達(dá)式可以action。*ActionContextActionContext.getContext().getSession().put("session_username","session_username");ActionContext.getContext().getSession().put("session_psw","session_psw");ValueStackvalueStack=ActionContext.getContext().getValueStack();從上面的代碼中可以看出來(lái),struts2ActionContextognl數(shù)ActionContextstruts2session*servletrequestServletActionContext.getRequest().setAttribute("req_psw","req_psw");1、可以通過(guò)ServletActionContext得到servlet2ServletActionContext返回OgnlOgnlOgnlContext中的數(shù)據(jù)輸elognl用法1(#號(hào)用法1、OGNL上下文和action上下文,#相當(dāng)于ActionContext.getContext();2、如果的是map中的值而不是對(duì)象棧中的值,由于map中的數(shù)據(jù)不HTTP HttpServletRequest屬M(fèi)ap ServletContext cation順序其屬性#attr.username相當(dāng)于按照順序在以上三個(gè)范圍內(nèi)username的屬性,直到找到為 actionpublicpublicStringtestScope()//把字符串"request_msg"request//把字符串"session_msg"session"session_username","session_username");//把字符串"application_msg"application"application_username","application_username");return}<%@<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-<%@tagliburi="/struts-tags"prefix="s"%> //struts2的ognlscope(request,session,application)的輸出<br>request:<s:propertyvalue="#request.request_username"/><br>session:<s:propertyvalue="#session.session_username"/><br>OGNL會(huì)設(shè)定一個(gè)對(duì)象(root對(duì)象)struts2CompoundRoot,或者actionpublicpublicString//ognl=valueStack.set("msg","object_msg");return"ognl_objectstack";}//keymsgvaluepush進(jìn)對(duì)象棧,怎么樣取?14.11.1中將解決這個(gè)問(wèn)題。用法3(深入理解對(duì)象棧有三個(gè)類(lèi) 類(lèi)類(lèi)packagecn.public{privateIntegerpid;privateStringpname;privateStringcomment;}Studentpackagecn. publicclassStudent{privateIntegersid;privateStringsname;privateStringcomment;}OgnlActionpublicclassOgnlActionextendsActionSupportprivateStringprivateStringid=} =Studentstudent=newStudent();但是大家注意一個(gè)現(xiàn)象:在student對(duì)象中有comment屬性,在 也有comment屬性,在OgnlAction中還有comment屬性,如果頁(yè)面輸出Comment屬性應(yīng)該選擇哪種呢?studentcomment的值。4(構(gòu)造ognlMap,如#{‘foo1’:’bar1’,’foo2’:’bar2’};這種用法經(jīng)常用在給radio,checkbox等賦值上。:<inputtype=”radio”name=”sex”<inputtype=”radio”name=”sex”Map<String,StringmapnewHashMap<String,String>();map.put("male","男");map.put("female女ServletActionContext.getRequest().setAttribute("map",map);//1ActionContext.getContext().put("map",map);//2jsp<s:property<s:property<s:property<s:propertyOGNL表達(dá)式。{}OGNL "用戶名:<inputtype=”textaction中:<s:property用于在資源文件中action中:<s:propertyProperty說(shuō)屬1null,則顯示該屬性指定的值。2escape可選屬性,指定是否格式化為html3例1(默認(rèn)值利用 publicStringtestProperty1(){return"ognlTag";}利用 <s:propertyvalue屬性,所以應(yīng)該輸出的是棧頂元素 2(defaultpropertydefaultpublicStringtestDefault(){return}propertyvalue沒(méi)有值的情況下,輸出default的值<s:propertyvalue="#request.request_username"default="defaultvalue"/> request中的key值為.request_username,而頁(yè)面上的輸出為.request_username11,不對(duì)應(yīng),所以應(yīng)該輸出default的值。property中的escape的值<s:propertyvalue="%{'<hr>hr的解析說(shuō)明:因?yàn)閑scapsetrue,也就是說(shuō)<hr>hr的解析會(huì)當(dāng)作一個(gè)字符串處<s:propertyvalue="%{'<hr>hr的解析說(shuō)明因?yàn)槿绻鹐scapse為false,則把字符串中符合 4(輸出棧頂String的值publicStringtestString(){return"ognlString";}Debug說(shuō)利用debug可以輸出OGNLContext所有的例ognlpublicStringtestDebug(){return"ognlDebug";}利用 輸出OgnlContext中所有的值 Set說(shuō)屬變量的名字,name、id與var表達(dá)的含義是一樣的。VarAction。如果沒(méi)有設(shè)置該屬性,則默認(rèn)會(huì)放在action測(cè)試 publicStringtestSet(){return"ognlSet";}測(cè)試set <s:property<s:propertyPush說(shuō)例href="${pageContext.request.contextPath}/ognl/ognlTagAction_testPUSH.action">測(cè)publicStringtestPUSH(){ServletActionContext.getRequest().setAttribute("request_username","username");return"ognlPUSH";}<s:pushBean說(shuō)實(shí)例化一個(gè)符合javabean規(guī)范的class,體內(nèi)可以包含幾個(gè)param元素,可用set方法,給class的屬性賦值。屬

request作用域中。如果沒(méi)有設(shè)置該屬性,對(duì)象被例對(duì)象publicStringtestBean(){ServletActionContext.getRequest().setAttribute("pid",1);測(cè)試ServletActionContext.getRequest().setAttribute("comment"," return"ognlBean";}給一 <s:bean " <s:paramname="pid"<s:paramname="pname"<s:paramname="comment" 因 --<s:property<s:property<s:property 對(duì) 在棧頂,所以當(dāng)對(duì)象就被刪除掉了。所以在--在map中出現(xiàn)了 --<s:property<s:property<s:property就可以在 Action說(shuō)通過(guò)指定命名空間和action的名稱(chēng),可以直接調(diào)用的屬AcitonAction所在名空間(action的名稱(chēng)后不加.action)Action的result是否需要被執(zhí)行,默認(rèn)值為false,例通過(guò) 的 publicStringtestBean(){ServletActionContext.getRequest().setAttribute("pid",1);ServletActionContext.getRequest().setAttribute("request_username","username");ServletActionContext.getRequest().setAttribute("pname","username");ServletActionContext.getRequest().setAttribute("comment"," return}executeResultfalse,action,action面Iterator說(shuō)屬intgetCount()intgetIndex()booleanisEven()返回當(dāng)前迭代元素的索引是否是偶數(shù)booleanisOdd() booleanisFirst() 返回當(dāng)前迭代元素是否為第一個(gè)元素booleanisLast() 通過(guò) 的list集合遍歷(list通過(guò)push方法壓入到棧頂 href="${pageContext.request.contextPath}/ognl/ognlTagAction_testList1.action">測(cè)試*listpushpublicStringtestList1(){ServletActionContext.getRequest().setAttribute("request_username","username"); List=newArrayList< 1List=new for(int=}for(int=}*****而這個(gè)時(shí)候如果頁(yè)面用<s:iteratorvalue="top"></s:iterator>top代表對(duì)象棧的棧頂?shù)脑?**********<s:iteratorvalue="top"></s:iterator>top代表對(duì)象棧的棧頂?shù)脑?lt;s:iteratorvalue="top"></s:iterator>top代表對(duì)象棧的棧頂?shù)脑豶eturn}2(action屬性通過(guò) 在OgnlTagActionprivateList< >pList;publicList< >getPList(){return}publicvoidsetPList(List< >list){pList=list;}publicStringername","username");//在successOgnlTag.jsp中<s:push 的這this.pList=newArrayList< for(inti=0;i<10;i++){= }return}在successOgnlTag.jsp用 迭 list中的數(shù)據(jù)(list作為action中的屬性<s:iterator<s:property說(shuō)明:因?yàn)間laAto在對(duì)象棧,以ae中的Ls可以不#號(hào)。從第一個(gè)dbg 以看出,這個(gè) 把當(dāng)前在代的對(duì)象臨時(shí)放到了棧頂。itrtr元結(jié)束迭代時(shí)棧頂?shù)膶?duì)象就 。所以第一次dbg和第二次的3(Map中通過(guò) 的list集合遍歷(list通過(guò)ActionContext.getContext().putOgnlContextMap中>測(cè)試* List通過(guò)put方法放入到OnglContext的mappublicStringtestList3(){ List=new for(int=}return}用 list中的數(shù)據(jù)(list經(jīng)過(guò)ActionContext.getContext().putOgnlContext<s:iterator <s:propertyiteratormap,value的值可以加#也可以不加#,這點(diǎn)需要注意。Debug2一樣。*iteratorbegin,end,steppublicString List=new for(int=}return}用 end="%{#request.end}"step="%{#request.step}"><s:property說(shuō)明:begin屬性為開(kāi)始位置,end屬性為結(jié)束位置,step為步長(zhǎng)。這里要beginognl表達(dá)式傳遞過(guò)來(lái)的。iteratorstatus *iteratorstatuspublicStringtestList5(){ServletActionContext.getRequest().setAttribute("request_username","username"); List=newArrayList< for(int= } return"ognlList5";}iteratorstatus如果提供status每次迭代時(shí)候?qū)⑸梢粋€(gè)IteratorStatus實(shí)例并放入堆棧中用 查看堆棧,在map中,存在一個(gè)st,類(lèi)型stIteratorStatus對(duì)象,有如下屬性intgetCount()返回當(dāng)前迭代的元素個(gè)數(shù)intgetIndex()booleanisEven()返回當(dāng)前迭代元素的索引是否是偶數(shù)booleanisOdd() booleanisFirst() 返回當(dāng)前迭代元素是否為第一個(gè)元素booleanisLast() <table<s:iterator List" "<td><s:property<td><s:property<td><s:property 例6(奇偶行變色iteratorstatus屬性完成隔行變色 publicString測(cè)試 List=new for(int=}return}<style}}<table<s:iteratorList""--<trclass="<s:property<td><s:property<td><s:property<td><s:property<td><s:property<td><s:property<td><s:property<td><s:property <td><s:property If/elseif/else說(shuō)基本的流程控制。If可以單獨(dú)使用,也可以結(jié)合elseif或else使用屬例的使用">*publicStringtestIF(){ List=new for(int=}return}測(cè)試 <table<s:iteratorList""value--<trclass="<s:property<td><s:property <td><s:property <s:if .pid<3">id url說(shuō)該用于創(chuàng)建url,可以通過(guò)”param”提供request參數(shù)屬u(mài)rlaction.value;例測(cè)試 的使用href="${pageContext.request.contextPath}/ognl/ognlTagAction_testURL.action">*測(cè) publicStringtestURL(){return}測(cè)試 的使用--<s:paramname="pid"<s:paramname="pname"<ahref="<s:property說(shuō)明:如果url 不寫(xiě)var屬性,則url 輸出url的路徑。如果寫(xiě)上var變量,則會(huì)在OgnlContext中出現(xiàn)相應(yīng)的key值:myurl。所以在程序的最后一行 #myurl變量從而得到路徑。Param是傳遞的參數(shù)。這里需要注意:value="%{'zd'}可以,但是value=”zd”是不行的。后面的寫(xiě) 去棧頂查找zd。所以s:url 一個(gè)url,然后在外部使用。OgnlJavaOGNL>測(cè)試*publicStringtestListLength(){ List=new for(intfor(int= }return"ognlListLength";}<s:property <s:iteratorOgnlJavaOgnlMap.get(newUseruser=ReturnJavaOgnlMapmap=newHashMap();ReturnMapmap=newHashMap();Map.put(newMap.put(newMap.put(new<s:iterator--<s:property<s:property--<s:property<s:property<s:propertyUI1、UI在html文件中表現(xiàn)為一個(gè)表單元素2、使用struts2的ui有如下好處1、可以進(jìn)行表單的回顯2、對(duì)頁(yè)面進(jìn)行布局和排版Form1ids:form的唯一標(biāo)識(shí)??梢杂?geementById()獲取。2、name屬性為s:form的名字,可以用.geementsById()獲取。3s:form將顯示表格的形式。TextfieldPassword true,就能顯示HiddenHidden并沒(méi)有加tr和SubmitsubmittypesubmitsubmittypetypeimageResetTextareaCheckboxCheckboxlistlistKey相當(dāng)于<inputtype=”checkbox”>value,listValuelabel的顯Lists:select,s:radiocheckboxprivateprivateStringusername="aaa";privateStringpassword="bbb";publicStringgetUsername(){return}publicvoidsetUsername(Stringusername){this.username=username;}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){this.password=password;}<s:textfield 中的username和action中的屬性名稱(chēng)必須保持一致。 也是根據(jù)name進(jìn)行回顯。屬性驅(qū)在servlet中獲取頁(yè)面?zhèn)鬟f過(guò)來(lái)的數(shù)據(jù)的方式是:request.getParameter(“username”);username的數(shù)據(jù)。在action中可以通過(guò)屬性驅(qū)動(dòng)的方式來(lái)獲取頁(yè)面的值。用戶名:<inputtype="text:<inputtype="password"<inputpublicclassPropertyDriverActionextendsActionSupport{privateStringusername;privateStringpassword;publicStringgetUsername(){return}publicvoidsetUsername(Stringusername){this.username=username;}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){this.password=password;}publicStringtestPropertyDriver(){1name的屬性和action2Actiongetset3、也就是說(shuō)當(dāng)執(zhí)行ParameterInterceptor器的時(shí)候,action的所有的屬性4actionString類(lèi)型,而是其他類(lèi)型呢?struts2類(lèi)型轉(zhuǎn):<inputtype="text":<inputtype="text"出生日期:<inputtype="text<inputaction中有agenameset和get方法就能得到頁(yè)面上agename的值。如果action中是日期類(lèi)型呢?struts2struts2中可以把字符串類(lèi)型轉(zhuǎn)yyyyMMdd,應(yīng)該怎么辦呢?類(lèi)型轉(zhuǎn)化將解決這個(gè)DateConverterpublicpublicclassDateConverterextendsDefaultTypeConverter{publicObjectconvertValue(Mapcontext,Objectvalue,ClasstoType)//TODOAuto-generatedmethodstubStringdateStr=((String[])value)[0];SimpleDateFormatsimpleDateFormat=newSimpleDateFormat("yyyyMMdd");try{return}catch(ParseExceptione)//TODOAuto-generatedcatch

publicObjectconvertValue(Mapcontext,ObjectMembermember,StringpropertyName,Objectvalue,ClasstoType);{public{}publicObjectconvertValue(Mapcontext,Objectvalue,Class{}publicObjectconvertValue(Mapcontext,Objecttarget,Membermember,StringpropertyName,Objectvalue,Class{}}6個(gè)參數(shù)的方法。8convertTypevalueproperties為數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)換類(lèi)。所以需要把DateConverter類(lèi)用配置文件進(jìn)行。 下yyyy-MM-dd可以參照XWorkBasicConverter這個(gè)類(lèi)說(shuō)明問(wèn)題。17.2.2的做法,還可以考慮全局的配置文件。1perties。2java.util.Date=cn.java.util.DateDateConverter這個(gè)類(lèi)進(jìn)行轉(zhuǎn)化。適合于所有的action中的屬性。模型驅(qū)假設(shè)你正在完成一個(gè)的功能。在需要得到20多個(gè)屬性,才能完成注冊(cè)。如果用action中的屬性獲取值,就是這樣的情況:1action20220setget這樣會(huì)導(dǎo)致action<s:form <s:textfield<s:passwordpublicclassModelDriverActionextendsActionSupportimplementsModelDriven<User>{privateUsermodel=newUser();publicUsergetModel()//TODOAuto-generatedmethodstubreturnthis.model;}publicStringmodeldriver(){return"modeldriver";}}mod

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論