今天在為同事解決問題的時候,發現了自己以前對valuestack的理解有點偏差,通過問題的解決,也體驗了一把溫故而知新
廢話少說,步入正題
當訪問乙個action的時候,此時struts2會把整個action壓入valuestack的頂部,此時valuestack就乙個action物件
我們通常會寫stack.set(key1,value1) 或者statck.setvalue(key2,value2) 這兩個是有區別的,前者會在valuestack壓入乙個hashmap,並將key1,value1植入該hashmap 那麼此時valuestack會有兩個物件,頂部是hashmap,底部是action 後者 會 將key2,value2直接植入到頂部的物件,通常是action,如果action沒有相應的set方法,那麼執行這個方法等於白搭,你如果此時執行valuestack.findvalue就會為空
我們通常會在多個***傳遞資料,正如前面所說,你必須得再action中寫入set方法,否則無效,如果你不想寫,那麼請用valuestack.set,這樣就不用改寫action. 但又存在乙個隱患,如果***1中你寫了valuestack.set,然後你在***2中同findvalue獲取了該值,這沒有問題,假設你突然想在***2中傳乙個值給action ,問題就暴露了,你會在***2中像平常一樣寫statck.setvalue,然後在action 中加上 set,滿以為可以傳遞過去,其實不行,因為此時棧頂是乙個map,而非action,你此時是將值植入到map,而非action,所以傳值失敗。
valuestack作為***、action,甚至頁面傳遞資料的乙個資料結構,特別是當棧中存在多個物件的時候,必須注意棧中物件的順序以免產生一些惱人的問題。
valuestack工作原理
當訪問乙個action的時候,此時struts2會把整個action壓入valuestack的頂部,此時valuestack就乙個action物件 我們通常會寫stack.set key1,value1 或者statck.setvalue key2,value2 這兩個是有區別的,前者會在value...
valuestack的工作原理
當訪問乙個action的時候,此時struts2會把整個action壓入valuestack的頂部,此時valuestack就乙個action物件 我們通常會寫stack.set key1,value1 或者statck.setvalue key2,value2 這兩個是有區別的,前者會在value...
valuestack的工作原理
今天在為同事解決問題的時候,發現了自己以前對valuestack的理解有點偏差,通過問題的解決,也體驗了一把溫故而知新 廢話少說,步入正題 當訪問乙個action的時候,此時struts2會把整個action壓入valuestack的頂部,此時valuestack就乙個action物件 我們通常會寫...