:struts的
action
跳轉[1]
完整的action
name="someform"
input="somejsp.jsp"
首先,struts
的actionservlet
接收到乙個請求,然後根據
struts-config.xml
的配置定位到相應的
(對映);接下來如果
form
的範圍是
request
或者在定義的範圍中找不到這個
form
,建立乙個新的
form
例項;取得
form
例項以後,呼叫其
reset ()
方法,然後將表單中的引數放入
form
,如果validate
屬性不為
false
,呼叫validate()
方法;如果
validate()
返回非空的
actionerrors
,將會被轉到
input
屬性指定的
uri,如果返回空的
actionerrors
,那麼執行
action
的execute()
方法,根據返回的
actionforward
確定目標
uri。
這樣做的效果是:
execute()
僅當validate()
成功以後才執行;
input
屬性指定的是乙個
uri。
[2]
僅有form
的action
首先,struts
會在定義的
scope
搜尋someform
,如果找到則重用,如果找不到則新建乙個例項;取得
form
例項以後,呼叫其
reset()
方法,然後將表單中的引數放入
form
,如果validate
屬性不為
false
,呼叫validate()
方法;如果
validate()
返回非空的
actionerrors
,將會被轉到
input
屬性指定的
uri,如果返回空的
actionerrors
,那麼轉到
parameter
屬性指定的目標
uri。
這樣做的效果是:沒有
action
類可以存放我們的業務邏輯,所以所有需要寫入的邏輯都只能寫到
form
的reset()
或者validate()
方法中。
validate()
的作用是驗證和訪問業務層。因為這裡的
action
對映不包括
forward
(也沒有意義),所以不能重定向,只能用預設的那個
forward
。這種僅有
form
的action
可以用來處理資料獲取並
forward
到另乙個
jsp來顯示。
[3]
僅有action
的action
input="somejsp.jsp"
首先,actionservlet
接收到請求後,取得
action
類例項,呼叫
execute()
方法;然後根據返回的
actionforward
在配置中找
forward
,forward
到指定的
uri或
action。
這樣做的效果是:沒有
form
例項被傳入
execute()
方法,於是
execute()
必須自己從請求中獲取引數。
action
可以被forward
或者重定向。這種
action
不能處理通過
html form
提交的請求,只能處理鏈結式的請求。
[4]
僅有jsp
的action
首先,actionservlet
接到請求後呼叫
forwardaction
的execute()
方法,execute()
根據配置的
parameter
屬性值來
forward
到那個uri。
這樣做的效果是:沒有任何
form
被例項化,比較現實的情形可能是
form
在request
更高階別的範圍中定義;或者這個
action
被用作在應用程式編譯好後充當系統引數,只需要更改這個配置檔案而不需要重新編譯系統。
[5]
兩個action
對應乙個
form
name="someform"
input="somejsp.jsp"
name="someform"
input="someotherjsp.jsp"
就每個單獨的
action
來講,處理上並沒有和完整的
action
有什麼實質的區別。這個組合模式可以被用來傳遞命令物件(
form
)。需要注意的是在後乙個
action
中同樣會呼叫
form
的reset()
和validate()
方法,因此我們必須確保
form
中的資訊不被重寫。
處理的方式大致分為兩種:
a) 在
request
中放入乙個指示器表明前乙個
action
有意向後乙個
action
傳遞form
,從而在後乙個
action
可以保留那個
form
中的值,這一方式只能在使用
forward
時使用。
b) 當使用
redirect
而不是forward
時,可以把指示器放在
session
或更高的級別,在命令鏈的最後一環將這個指示器清除。
[6]
兩個action
對應兩個
form
name="someform"
input="somejsp.jsp"
"name="someotherform"
input="someotherjsp.jsp"
這個組合方式跟前一種在流程上沒有太大區別,只是我們現在對於兩個
action
分別提供了
form
,於是**看上去更加清晰。於是我們可以分別處理
web應用程式的輸入和輸出。值得注意的是,後乙個
action
同樣會嘗試往
form
中寫入那些引數,不過我們可以這樣處理:
a) 在後乙個
form
中使用另一套屬性名;
b) 只提供
getter
而不提供
setter。
大致的處理是這樣:
前乙個action
接收輸入、驗證、然後將資料寫入業務層或持久層,重定向到後乙個
action
,後乙個
action
手動的從業務層
/持久層取出資料,寫入
form
(通過其他方式),交給前台
jsp顯示。
這樣做的好處是不必保留輸入
form
中的值,因此可以使用
redirect
而不是forward
。這樣就降低了兩個
action
之間的耦合度,同時也避免了不必要的重複提交。
struts的action跳轉大全
1 完整的action name someform input somejsp.jsp 這樣做的效果是 execute 僅當validate 成功以後才執行 input屬性指定的是乙個uri。2 僅有form的action 首先,struts會在定義的scope搜尋someform,如果找到則重用,...
Struts中action跳轉種類
1 完整的action name someform input somejsp.jsp 這樣做的效果是 execute 僅當validate 成功以後才執行 input屬性指定的是乙個uri。2 僅有form的action 首先,struts會在定義的scope搜尋someform,如果找到則重用,...
struts2 action 頁面跳轉
標籤 action struts2 redirect 舉報 1 type dispatcher 為預設,用於jsp頁面跳轉 index.jsp 完整的寫法為 index.jsp 2 type redirect 重定向到jsp action 外部 index.jsp login.do 重定向時帶引數處...