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

您的位置:首頁技術文章
文章詳情頁

Java下Struts框架中的ActionForm類詳解

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

ActionForm的應用

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

(2) 、一個form類中的每一個屬性都將和頁面中form 表單中的每一個元素一一對應

例如、

一個表單為:

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

一個與之對應的form類

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

一個引用該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.這個userForm默認會被放在session中,使用scope可以指定存儲該form對象的地方,自然attribute就是用來給存放在該范圍中的form對象起的別名,如果不設置attribute該范圍中的form對象起的別名,如果不設置attribute屬性那么attribute默認的就使用name的值

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

1.根據路徑找到對應的內存中存放著的配置對象中的action2.根據action中的attribute屬性,從session中得到一個對應的form實例3.該form實例調用reset方法對自己進行清空4.用表單中的值去填充該form實例5.如果要該form要進行驗證那么就該form就會調用validate方法按照我們規定的驗證規則進行驗證

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

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

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

這就是struts對表單的回添機制

Example:

表單為:

//先導入struts的html標簽庫<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>

經驗:

1.顯示頁面之前服務器會向text.do發送一次請求,該請求也就是提交表

2.當上面的請求到FC的時候會用form中的值去填充這個表單然后回顯給用戶所以用戶看到的頁面顯示結果是salary文本框中有一個值為1000

3.當用戶再次提交表單,請求到達FC的時候服務器會首先檢查你所提交的表單元素的值跟session中這個form與之對應的屬性的值是否相同,如果相同就直接利用該form去填充表單,如果不相同就先把提交的表單元素的值賦給form中與之對應的屬性再利用form去填充表單

4.該實例有一個問題,就是當用戶第一次選擇了兩種語言,然后提交,第二次用戶一種語言都沒選,然后提交,這時候回顯的結果出人意料,復選框中的值既然是第一次用戶所選擇的值,

原因是,復選框有一個特性,如果用戶什么都不選擇,那么提交表單的時候就不提交復選框,如果我們使用get請求提交的話就能明顯的看到這種情況表單提交的屬性只有username和salary兩個,這兩個元素即使沒有值也會提交,就因為這一點,當表單到達FC的時候,服務器只看到提交的兩個表單元素username和salary,然后檢查form中的屬性也只會檢查username和salary兩個,而不會檢查lang,如果表單中的username和salary與form中與之對應的username和salary屬性不一樣,那么就先把表單中的username和salary值賦給form中的username和salary屬性,然后利用form去填充表單,如果一樣,那么就利用原來的form去填充表單,在這兩種情況下form中的lang屬性都將不會被檢查更不用提改變,所以lang用的還是上一次的值,自然回顯的時候form中的復選框的值就是上一次的值

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

(四)、Form與實體對象之間的關系

有的時候我們為了方便會把取到的form中的值直接拷貝到實體對象中去然后把實體對象再存儲到數據庫中,這樣給我們的編程帶來了很多的方便,但前提是實體對象中需要拷貝的屬性,form中要拷貝過去的屬性,與form對應的表單元素他們三者必須一一對應.

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

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對象中://下面這條語句是在action的某個方法中做的所以form直接可以用BeanUtils.copyProperties(user,form);

3.將user對象存放在數據庫中

到此這篇關于Java下Struts框架中的ActionForm類詳解的文章就介紹到這了,更多相關Java Struts框架 ActionForm類內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品手机在线播放| 婷婷综合成人| 精品视频99| 国产一区二区三区四区大秀| 精品久久电影| 日韩欧美综合| 偷拍欧美精品| 欧美+亚洲+精品+三区| 国产精品99一区二区| 蜜臀av免费一区二区三区| 亚洲国产一区二区三区在线播放| 91久久亚洲| 午夜在线视频观看日韩17c| 亚洲一区二区三区中文字幕在线观看 | 中文字幕一区日韩精品| 少妇精品在线| 国产精品porn| 日韩免费高清| 亚洲免费精品| 日韩av不卡在线观看| 欧美日韩91| 98精品视频| 午夜免费一区| 日本va欧美va瓶| 精品香蕉视频| 精品一区毛片| 视频一区日韩| 卡一卡二国产精品| 99热精品久久| 亚洲精品高潮| 美女av一区| 99精品在线| 亚洲一级大片| 国产66精品| 亚洲欧美成人综合| 久久激五月天综合精品| 亚洲深夜视频| 美女国产精品| 精品国产亚洲一区二区三区在线 | 午夜精品网站| 青草综合视频| 三上悠亚国产精品一区二区三区| 久久成人亚洲| 精品视频97| 男女精品网站| 久久精品亚洲| 精品一区三区| 国产麻豆一区二区三区| 四虎4545www国产精品 | 免费成人av在线播放| 欧美激情麻豆| 欧美另类综合| 欧美韩一区二区| aa亚洲婷婷| 国产精品欧美三级在线观看| 成人精品中文字幕| 蜜臀av一区二区三区| 色乱码一区二区三区网站| 中文一区一区三区免费在线观 | 国产成人77亚洲精品www| 亚洲综合日韩| 精品欠久久久中文字幕加勒比| av不卡在线| 岛国av在线播放| 日本不卡视频在线| 在线成人动漫av| 国产精品任我爽爆在线播放| 伊人精品视频| 国产精品精品| 日本一区二区三区视频在线看| 亚洲v在线看| 国产精品久久久免费| 日韩视频在线一区二区三区| 久久精品女人| 亚洲精品韩国| 国产精品99免费看| 精品视频自拍| 欧美一级网站| 在线一区免费观看| av免费不卡国产观看| 久久午夜影院| 久久激情av| 日本а中文在线天堂| 日韩av资源网| 中文久久精品| 国产一区二区三区天码| 亚洲手机在线| 欧美一级精品| 精品久久国产一区| 欧美欧美黄在线二区| 国产一区二区高清| 九九综合在线| 久久精品欧美一区| 色婷婷色综合| 久久av免费| 91伊人久久| 日韩精品一二三四| 国产在线成人| 日韩久久视频| 国产a亚洲精品| 国产精品综合| 91麻豆精品| 日韩在线观看中文字幕| 久久国产精品久久久久久电车 | 久久这里只有| 国产精品网站在线看| 日韩精品亚洲一区二区三区免费| 美女精品在线| 午夜在线精品偷拍| 亚洲深爱激情| 亚洲天堂久久| 久久久成人网| 91精品在线观看国产| 日韩在线欧美| 久久91导航| 日韩免费看片| 韩国精品主播一区二区在线观看| 在线天堂资源www在线污| 国产专区精品| 高清av一区| 日韩av免费大片| 亚洲1234区| 久久要要av| 伊人久久成人| 美女精品网站| 三级欧美在线一区| 丝袜脚交一区二区| 日韩影院精彩在线| 婷婷综合国产| 日韩高清一区| 国产精品天堂蜜av在线播放| 欧美国产极品| 欧美成人a交片免费看| 精品捆绑调教一区二区三区| 亚洲精品.com| 欧美不卡视频| 欧美日韩国产一区二区三区不卡| 亚洲成人日韩| 日韩精品一级中文字幕精品视频免费观看| 亚洲免费网址| 婷婷亚洲成人| 国产福利资源一区| 麻豆视频在线看| 久久久9色精品国产一区二区三区| 正在播放日韩精品| 国产在线日韩| 亚洲人成毛片在线播放女女| 日本视频一区二区| 美女av一区| 久久久噜噜噜| 丝袜亚洲另类欧美| 国产欧美欧美| 麻豆mv在线观看| 狠狠干综合网| 日本午夜精品久久久久| 久久99久久人婷婷精品综合| 精品亚洲成人| 国产字幕视频一区二区| 亚洲婷婷丁香| 国产精品分类| 99精品小视频| 日韩高清一区| 国产a亚洲精品| 亚洲一区成人| 国产午夜精品一区在线观看| 日韩欧美二区| 亚洲精品在线二区| 精品视频亚洲| 尤物在线精品| 国产精品白浆| 日韩三区在线| 日韩1区2区3区| 日本а中文在线天堂| 模特精品在线| 精品深夜福利视频| 久久国产精品亚洲77777| 国产精品久久久久9999高清| 久久精品国内一区二区三区水蜜桃| 中文精品电影| 国产aⅴ精品一区二区四区| 国产视频一区在线观看一区免费| 国产欧美日韩一区二区三区四区 | 免费不卡中文字幕在线| 日韩高清在线一区| 国产a久久精品一区二区三区| 伊人久久婷婷| 国产精品99久久久久久董美香| 激情欧美丁香| 国产精品一区二区三区av麻 | 日韩伦理一区| 7777精品| 国产一区二区三区自拍| 国产日韩欧美一区| 日韩视频在线一区二区三区| 久久国产精品美女| 亚洲综合精品| 伊人网在线播放| 日韩三区四区| 在线日韩中文| 韩日一区二区|