日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Java下Struts框架中的ActionForm類詳解

瀏覽:47日期:2022-08-28 13:34:20

ActionForm的應(yīng)用

(1) 、創(chuàng)建一個(gè)form類必須繼承四個(gè)父類中的一個(gè)。比如繼承ActionForm。

(2) 、一個(gè)form類中的每一個(gè)屬性都將和頁面中form 表單中的每一個(gè)元素一一對(duì)應(yīng)

例如、

一個(gè)表單為:

<form> <input type='text' name='username'></input> <input type='password' name='password'></input> <input type='text' name='email'></input></form>

一個(gè)與之對(duì)應(yīng)的form類

public class UserForm extends ActionForm{ private String username; private String password; private String email;//下面省略getter和setter方法 }

一個(gè)引用該form的appAction

<form-beans> <form-bean name='userForm' type='form.UserForm'></form-bean></form-beans><action-mappings><action path='/test' type='action.TestAction' name='userForm' attribute='uf' scope='request'></action></action-mappings>

3.在引用了form-bean的action中name屬性的值就是form-bean中name的值

4.這個(gè)userForm默認(rèn)會(huì)被放在session中,使用scope可以指定存儲(chǔ)該form對(duì)象的地方,自然attribute就是用來給存放在該范圍中的form對(duì)象起的別名,如果不設(shè)置attribute該范圍中的form對(duì)象起的別名,如果不設(shè)置attribute屬性那么attribute默認(rèn)的就使用name的值

2.原理跟普通HTML表單使用Form的工作原理大同小異,不同在于ActionServlet對(duì)struts-config進(jìn)行解析時(shí),當(dāng)解析到某個(gè)action中存在一個(gè)屬性name,那么ActionServlet中的RequestProcessor就會(huì)根據(jù)該name的值找到對(duì)應(yīng)的form-bean然后創(chuàng)建一個(gè)對(duì)應(yīng)的form類實(shí)例,放在我們定義的存儲(chǔ)范圍中,當(dāng)表單提交到該action對(duì)應(yīng)的appAction之前也就是到達(dá)FC的時(shí)候,FC會(huì)做以下事情

1.根據(jù)路徑找到對(duì)應(yīng)的內(nèi)存中存放著的配置對(duì)象中的action2.根據(jù)action中的attribute屬性,從session中得到一個(gè)對(duì)應(yīng)的form實(shí)例3.該form實(shí)例調(diào)用reset方法對(duì)自己進(jìn)行清空4.用表單中的值去填充該form實(shí)例5.如果要該form要進(jìn)行驗(yàn)證那么就該form就會(huì)調(diào)用validate方法按照我們規(guī)定的驗(yàn)證規(guī)則進(jìn)行驗(yàn)證

(三)、struts表單使用Form的工作原理

1.利用struts的HTML標(biāo)簽庫定義的HTML元素其實(shí)是服務(wù)器端的java代碼,java代碼是編譯型代碼而HTML則是解釋型代碼,所以在使用struts的HTML標(biāo)簽庫定義的HTML元素要更加的嚴(yán)謹(jǐn),只要某個(gè)元素甚至是某個(gè)屬性沒有定義對(duì),那么編譯就不能通過從而拋出異常,例如在使用struts的HTML標(biāo)簽庫定義表單的時(shí)候action屬性是在編譯的時(shí)就要被確定的如果action屬性所定義的提交路徑是空或者是錯(cuò)誤,那么服務(wù)器在編譯的時(shí)候就會(huì)拋出500的異常,而不像普通HTML表單action屬性是在提交的時(shí)候才確定的

2.原理跟普通HTML表單使用Form的工作原理大同小異,不同在于當(dāng)服務(wù)器對(duì)form表單進(jìn)行編譯的時(shí)候會(huì)向action所指定的地址發(fā)一個(gè)請(qǐng)求,看是否正確,所以這個(gè)時(shí)候其實(shí)就已經(jīng)提交了一次表單,當(dāng)表單到達(dá)FC的時(shí)候跟上面做的幾件事情中就第三件不同,不同在于表單和form中的值都將互相填充,

這就是struts對(duì)表單的回添機(jī)制

Example:

表單為:

//先導(dǎo)入struts的html標(biāo)簽庫<html:form action='test.do' method='post'> <html:text property='username'></html:text> <html:text property='salary'></html:text> 中文<html:multibox property='lang' value='zh'></html:multibox> 英文<html:multibox property='lang' value='en'></html:multibox> 俄語<html:multibox property='lang' value='ey'></html:multibox> <html:submit value='click me'></html:submit></html:form>

form類為:

public class UserForm extends ActionForm{ private String username; private double salary=1000.00; private String[] lang; //省略getter和setter方法 }

配置文件為:

<form-beans> <form-bean name='userForm' type='form.UserForm'></form-bean></form-beans><action-mappings> <action path='/test' type='action.TestAction' name='userForm' attribute='uf'> <forward name='success' path='/show.do'></forward> </action> <action path='/show' type='action.ShowAction' > <forward name='success' path='/test.do'></forward> </action></action-mappings>

經(jīng)驗(yàn):

1.顯示頁面之前服務(wù)器會(huì)向text.do發(fā)送一次請(qǐng)求,該請(qǐng)求也就是提交表

2.當(dāng)上面的請(qǐng)求到FC的時(shí)候會(huì)用form中的值去填充這個(gè)表單然后回顯給用戶所以用戶看到的頁面顯示結(jié)果是salary文本框中有一個(gè)值為1000

3.當(dāng)用戶再次提交表單,請(qǐng)求到達(dá)FC的時(shí)候服務(wù)器會(huì)首先檢查你所提交的表單元素的值跟session中這個(gè)form與之對(duì)應(yīng)的屬性的值是否相同,如果相同就直接利用該form去填充表單,如果不相同就先把提交的表單元素的值賦給form中與之對(duì)應(yīng)的屬性再利用form去填充表單

4.該實(shí)例有一個(gè)問題,就是當(dāng)用戶第一次選擇了兩種語言,然后提交,第二次用戶一種語言都沒選,然后提交,這時(shí)候回顯的結(jié)果出人意料,復(fù)選框中的值既然是第一次用戶所選擇的值,

原因是,復(fù)選框有一個(gè)特性,如果用戶什么都不選擇,那么提交表單的時(shí)候就不提交復(fù)選框,如果我們使用get請(qǐng)求提交的話就能明顯的看到這種情況表單提交的屬性只有username和salary兩個(gè),這兩個(gè)元素即使沒有值也會(huì)提交,就因?yàn)檫@一點(diǎn),當(dāng)表單到達(dá)FC的時(shí)候,服務(wù)器只看到提交的兩個(gè)表單元素username和salary,然后檢查form中的屬性也只會(huì)檢查username和salary兩個(gè),而不會(huì)檢查lang,如果表單中的username和salary與form中與之對(duì)應(yīng)的username和salary屬性不一樣,那么就先把表單中的username和salary值賦給form中的username和salary屬性,然后利用form去填充表單,如果一樣,那么就利用原來的form去填充表單,在這兩種情況下form中的lang屬性都將不會(huì)被檢查更不用提改變,所以lang用的還是上一次的值,自然回顯的時(shí)候form中的復(fù)選框的值就是上一次的值

5.解決這一問題可以有兩種辦法,在提交表單以后就把session中的form對(duì)象給刪除掉,每一次提交都新創(chuàng)建一個(gè)form對(duì)象也就是在頁面的末尾加一個(gè)<%session.removeAttribute('uf')%>第二種解決辦法是在UserForm中覆蓋父類的reset方法,該reset方法將在form填充之前做,這樣我們就能在reset中把我們想要復(fù)位的屬性先復(fù)位

(四)、Form與實(shí)體對(duì)象之間的關(guān)系

有的時(shí)候我們?yōu)榱朔奖銜?huì)把取到的form中的值直接拷貝到實(shí)體對(duì)象中去然后把實(shí)體對(duì)象再存儲(chǔ)到數(shù)據(jù)庫中,這樣給我們的編程帶來了很多的方便,但前提是實(shí)體對(duì)象中需要拷貝的屬性,form中要拷貝過去的屬性,與form對(duì)應(yīng)的表單元素他們?nèi)弑仨氁灰粚?duì)應(yīng).

這樣我們就可以把表單中的值得到封裝到form中然后再把form中與實(shí)體對(duì)象中屬性相同的值拷貝到實(shí)體對(duì)象中

Example:

entity:

public class User{ private String name; private String password; private double salary; private String address; //省略getter和setter方法}

form:

public class UserForm{ private String name; private String password; private String salary; //省略getter和setter方法}

表單:

<form> <input type='text' name='name'></input> <input type='password' name='password'></input> <input type='text' name='salary'></input></form>

1.把表單中的值賦值給UserForm

2.把UserForm中的值拷貝到User對(duì)象中://下面這條語句是在action的某個(gè)方法中做的所以form直接可以用BeanUtils.copyProperties(user,form);

3.將user對(duì)象存放在數(shù)據(jù)庫中

到此這篇關(guān)于Java下Struts框架中的ActionForm類詳解的文章就介紹到這了,更多相關(guān)Java Struts框架 ActionForm類內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美一区91| 黄色日韩精品| 亚洲欧美日韩一区在线观看| 久久免费高清| 国产999精品在线观看| 国产亚洲久久| 国产精品videosex极品| 国产伦理久久久久久妇女| 日韩精品免费观看视频| 日韩精选在线| 国产亚洲久久| 综合日韩在线| 亚洲精品高潮| aⅴ色国产欧美| 99久久九九| 九色精品91| 免费视频一区三区| 日韩在线免费| 亚洲激情欧美| 亚洲影视一区二区三区| 亚洲精品综合| 国产乱码精品一区二区亚洲| 欧美激情 亚洲a∨综合| 国产精品v日韩精品v欧美精品网站| 免费看久久久| 性感美女一区二区在线观看| 日韩中文在线播放| 99热免费精品| 亚洲综合电影一区二区三区| 久久午夜影视| 欧美另类中文字幕| 国产一区二区三区亚洲综合| 久久青青视频| 亚洲手机在线| 在线视频亚洲| 日韩精品一级中文字幕精品视频免费观看 | 国产成人久久精品麻豆二区| 福利一区和二区| 韩国精品主播一区二区在线观看 | 欧美成人精品| 亚洲毛片在线| 精品一区av| 99久久九九| 日韩影院免费视频| 日韩不卡一区二区三区| 精品视频在线观看网站| 影视先锋久久| 日本欧美在线| se01亚洲视频 | 免费精品国产的网站免费观看| 99精品视频在线| 蜜臀av国产精品久久久久| 久久99青青| 天堂网av成人| 日本不卡一区二区三区| 中文字幕在线免费观看视频| 美女少妇全过程你懂的久久| 伊人久久大香线蕉av超碰演员| 日韩不卡在线观看日韩不卡视频| 国产一区二区三区视频在线| 天堂网在线观看国产精品| 欧美日韩精品一区二区三区视频| 色婷婷色综合| 亚洲精品在线a| 日韩不卡免费高清视频| 日本高清久久| 欧美/亚洲一区| 国产亚洲欧美日韩精品一区二区三区| 99久久亚洲精品蜜臀| 国产精品777777在线播放| 久久中文字幕av一区二区不卡| 日韩国产欧美在线视频| 久久中文在线| 日韩精品一级二级| 国产一区二区三区视频在线| 亚洲一区欧美| 久久久一二三| 久久超级碰碰| 天堂成人免费av电影一区| 国产suv精品一区二区四区视频 | 久久不射中文字幕| 国产欧美一区二区色老头| 日韩精品一卡| 欧美日韩一区二区国产| 国产高清久久| 国产a亚洲精品| 亚洲精品在线国产| 蜜桃tv一区二区三区| 精品久久久亚洲| 亚洲在线久久| 蜜桃国内精品久久久久软件9| 国产免费久久| 蜜桃视频第一区免费观看| 久久九九精品| 国产精品巨作av| 一区二区国产精品| 亚洲一级少妇| 国产伦精品一区二区三区千人斩| 蜜桃一区二区三区在线| 黄色不卡一区| 99热精品久久| 国产成人精品一区二区三区视频| 欧美亚洲一区二区三区| 伊人久久大香伊蕉在人线观看热v| 四虎国产精品免费观看| 青草av.久久免费一区| 欧美中文字幕| 亚洲v在线看| 精品三级在线观看视频| 国产精品一区二区美女视频免费看 | 免费观看在线色综合| 久久久久久久久久久妇女| 麻豆视频久久| 国产精品日本一区二区三区在线| 亚洲欧美日韩在线观看a三区| 91精品国产调教在线观看| 国产a久久精品一区二区三区| 国产精品欧美三级在线观看 | 日韩午夜视频在线| 亚洲永久字幕| 婷婷中文字幕一区| 蜜臀国产一区| 国产日韩欧美一区二区三区在线观看| 天堂成人免费av电影一区| 国产亚洲永久域名| 红桃视频亚洲| 欧美特黄视频| 国产精品88久久久久久| 国产精品av久久久久久麻豆网| 91欧美日韩| 黄色在线网站噜噜噜| 欧美日韩国产观看视频| 麻豆网站免费在线观看| 日韩综合一区| 日韩电影二区| 91精品啪在线观看国产18| 福利片在线一区二区| 欧美日韩亚洲一区三区| 97se亚洲| 国产日韩三级| 国产高清亚洲| 国产aⅴ精品一区二区四区| 精品国产91| 天堂av在线| 国产伊人精品| 视频在线观看国产精品| 亚洲免费一区三区| 日韩国产在线不卡视频| 国产精品欧美一区二区三区不卡 | 日本欧美一区二区| 国产综合亚洲精品一区二| 亚洲天堂1区| 午夜国产精品视频| 日韩亚洲国产欧美| 亚洲精品影视| 国产精品一区二区三区四区在线观看| 国产精品www994| 麻豆精品国产91久久久久久| 中文字幕在线高清| 国产一区二区三区不卡av| 免费看av不卡| 国产精品av一区二区| 伊人精品在线| 日本欧美久久久久免费播放网| 精品香蕉视频| 久久影院一区二区三区| 免费一二一二在线视频| 亚洲一区二区三区四区五区午夜 | 婷婷综合福利| 免费日韩成人| 91精品一区国产高清在线gif| 日韩亚洲在线| 国产三级一区| 91精品国产乱码久久久久久久| 免费视频久久| 亚洲三级网址| 精品视频一区二区三区在线观看 | 久久精品国产www456c0m| 91成人网在线观看| 亚洲精品欧洲| 欧美成人aaa| 日韩中文字幕麻豆| 国产欧美一区二区三区精品酒店 | 黑丝美女一区二区| 一区二区国产精品| 中文字幕一区二区精品区| 亚洲精品影视| 999久久久精品国产| 中文字幕一区二区三区日韩精品 | 亚洲欧美在线综合| 欧美极品一区二区三区| 欧美va亚洲va日韩∨a综合色| 亚洲视频国产精品| 久久久91麻豆精品国产一区| 久久精品中文| 日韩av一区二区三区四区| 日韩中文在线电影| 婷婷综合成人| 成人日韩在线观看| 日本国产欧美|