from: http://blog.csdn.net/tuiroger/article/details/3947896
今天張老師講了一些比較重要的strust標簽,<html:link>,<html:text>。formbean的原理及作用,還有formbean表單校驗以及表單校驗后如何處理,並進行了舉例驗證說明,把例子代碼敲了一遍,頗有收獲。
<html:link>標簽的三個好處:
使用<html:link action=“/action”/>不用關心web應用程序的路徑和ActionServlet的映射路徑。
可以自動在url后面附加jsessionid參數進行url重寫。可以用以下方法進行驗證。啟動一個新瀏覽器訪問第一個Action,查 看<html:link>生成的超鏈接地址,刷新后再查看這個超鏈接地址,比較差異可以看到<html:link>標簽的url 重寫功能。
可以對參數信息進行url編碼。 另外: jtsl標簽<c:url>標准標簽也有<html:link>標簽的后兩個作用。
在使用<html:link>標簽時需要注意的是:
在<html:link>的action屬性值的路徑后中直接加參數,但是不能對其中的中文字符進行url編碼。
使用paramID和paramName等屬性設置一個參數,可以完成中文參數的url編碼。
可以使用name和property屬性來設置多個參數。
<html:text>必須放 在<html:form>標簽中,回顯時就是從那個<html:form>關聯的formbean中取出的數 據。<html:form>的action屬性用於指定它要關聯到的formbean。action屬性指定的Action類必須有它關聯的 formbean,否則會出異常。<html:form>會創建一個formbean,這樣其包含的<html:text>才會 從formbean中取數據進行回顯。在表單提交之前生成的formbean是空的,里面不包含數據。(張老師找到了源代碼進行說明)可以設置一個int 型的age在jsp頁面用<html:text>進行顯示,第一次打開頁面就顯示0,因為int型的默認值為0,也能夠驗證這個。
<html:text>的兩個作用,1,生成<input type="text">代碼,2,其property屬性的值填充進文本框。
formbean的工作原理
如果某個Action關聯了一個FormBean,那么,當瀏覽器請求這個Action時,Struts框架將創建這個FormBean,把這個FormBean存儲在相應的Web域中,並用請求參數來填充這個formbean。
對於請求消息中的每個參數(包括網頁表單中的每個字段),其相關的ActionForm 通常都有一個對應的屬性來接受相應的參數值。
FormBean 表單校驗,formbean可以對填充其的每個參數進行校驗,校驗出錯了就返回到剛才填寫表單信息的頁面,並顯示上次填入的內容和錯誤提示信息。錯誤信息 和表單中原來填寫的數據是如何傳遞給jsp頁面呢? 把數據裝在一個對象中,再把對象存儲在request作用域中。這樣就可以在JSP頁面中取出Request域中是數據並進行顯示了。validate方 法返回的errors對象就是要給后面的jsp頁面顯示用的,errors對象中要存儲的就是要顯示錯誤信息,把errors存儲在request中,應 該使用request.setAttribute(“屬性名”,erros);存入的屬性名是一個固定的特殊名稱,這 樣<html:errors>才能使用這個屬性名從請求域中取錯誤。存儲的關鍵字是Globals.ERROR_KEY。
Struts1 Action 屬性詳解
一、Struts的Action的一些屬性的具體意思?
Struts中Action的一段定義如下
<action>
attribute="aaForm"
input="/aa.jsp"
name="aaForm"
path="/aa"
scope="request"
type="com.yourcompany.struts.action.AaAction">
<forward name="aa" path="/aa.jsp" />
</action>
二、Struts中Action的屬性詳解
/*
attribute:指定ActionForm保存到指定上下文所使用的屬性名,如果不指定attribute屬性值,
將使用name屬性值作為保存時的屬性名。即attribute的默認值就是name屬性值。
input: 該Action中相關ActionForm獲取用戶輸入的輸入頁面,當將ActionForm設為自動驗證輸入數據,發現不合法數據返回錯誤時,將返回該頁面
name: 當前Action中用到的ActionForm的名字,其具體信息在配置文件其他地方另有詳細定義
scop:指定保存ActionForm上下文的范圍。即Action中所用到的ActionForm的生存期,可以為“request”或“session”,隨着生存期的設置,該Action也會在相應的時間被創建
validate:如果本屬性為true則在Action動作之前其對應的ActionForm的validate方法會自動被調用,一般用以驗證用戶輸入的數據
forward:設置處理用戶請求的serverlet或其它資源如Jsp頁面等。如指定了這屬性則type屬性就會失去作用
嚴格來說<forward,include,type>屬性應該使用且只使用其中的一個。 這屬性用於跳轉到另一個非Action處理程序中。
unknown: 如果將該屬性設置為true,那么就是聲明這個Action將處理整個應用中所有未找到相應處理Action的請求,當然,一個應用系統中也只會有一個Action的unknown屬性可以設為true
Prefix:用來匹配請求參數與bean屬性的前綴
Suffix: 用來匹配請求參數與bean屬性的后綴
*/
與scope有關,比如scope="request" 時,可以通過request.getAttribute(attribute的值)來獲取Form對象
而name對應於前面form的定義。forward 中的name可以說是頁面的一個別名,轉發時根據名字就行了
可以轉發多個,如定義了兩個forward success和error
<forward name="success" path="/aa.jsp" />
<forward name="error" path="/bb.jsp" />