el為什麼可以取到值棧裡的資料

2021-08-09 12:04:30 字數 1169 閱讀 6051

下面這個類會在 struts2 初始化的時候,替換 httpservletrequest,執行於整個 struts2 的執行過程中,當我們試 圖呼叫 request.getattribute() 的時候,就會執行上面的這個方法。(這是乙個典型的裝飾器模式)在執行上面的方法時,會首先呼叫 httpservletrequest 中原本的 request.getattribute(),如果沒有找到,它會繼續到 valuestack 中去查詢, 而 action 在 valuestack 中,所以 action 中的變數通過 ognl 表示式,就能找到對應的值了
public

/*** the constructor

* @param req the request

*/super(req);

}/**

* gets the object, looking in the value stack if not found

** @param s the attribute key

*/public object getattribute(string s)

actioncontext ctx = actioncontext.getcontext();

object attribute = super.getattribute(s);

boolean alreadyin = false;

if (b != null)

// note: we don't let # come through or else a request for

// #attr.foo or #request.foo could cause an endless loop

if (!alreadyin && attribute == null && s.indexof("#") == -1)

} finally

}return attribute;

}}

在 webwork2.1.x 的年代,我們會編寫乙個***來做這個事情的。大致的原理是:在 action 執行完返回之前,依次讀取 action 中的所有的變 量,並依次呼叫 request.setattribute() 來進行設定。具體的整合方式,請參考以下這篇文件:

** 

silence_mind:

金為什麼可以生水?水為什麼可以生木?

五行相生,金生水 水生木 木生火 火生土 土生金,在現代人看來,有些不可理解,例如 金為什麼可以生水?水為什麼可以生木?同理,五行相剋,金剋木 木剋土 土剋水 水剋火 火剋金當中,木剋土 土剋水之類,也有點不好理解,似乎與常識有些格格不入。其實,一切產生於古代的文化,都必須用那個時代的常識或理念來解...

機器為什麼可以學習

機器學習 人工智慧炙手可熱,但是機器到底為什麼可以學習呢?本文將從霍夫丁不等式講到vc維,機器學習的原因所在。機器什麼時候可以學習 機器怎麼學習 如何讓機器學得更好總結 機器學習乍聽之下很厲害,這時候人就會想,這乙個普普通通的死板的機器,怎麼會學習呢?很容易地,人們舉了個簡單的問題 如下圖 x,y,...

為什麼 i 不能做左值,而 i 可以

算下來已經很久以前了,大概有那麼幾個星期了吧。看到了帖子上有人問為什麼下面的語句的對錯原因 int i 0 int ip i 錯誤 int ip i 正確 看到上面的語句,當時以為兩個都是是對的啊,可是當我用vs2010的編譯器試了試之後,才發現第乙個取位址確實是錯誤的語句,具體的提示是 error...