簡體   English   中英

Struts2中的怪異行為

[英]Weird behavior in Struts2

我在Struts上工作時遇到了一些奇怪的行為。 盡管它不會產生任何錯誤或錯誤,但我只是認為與大家共享它會很有趣。

也許你們中的一個可以解釋為什么會這樣。

使用以下代碼創建Struts動作-

public class MyAction extends ActionSupport {
    private Map<String, Map<String, Object>> map = new HashMap<String, Map<String, Object>>();
    public String execute() {
        System.out.println(map);
        return SUCCESS;
    }

    public Map<String, Map<String, Object>> getMap() {
        return map;
    }

    public void setMap(Map<String, Map<String, Object>> map) {
        this.map = map;
    }
}

創建關聯的映射和必需的Jsp並執行操作。 您將在控制台上看到以下輸出-

{systemProperties={java.runtime.name=Java(TM) SE Runtime Environment, sun.boot.library.path=C:\Program Files\Java\jdk1.6.0_32\jre\bin, java.vm.version=20.7-b02, shared.loader=${catalina.base}/shared/classes ....

因此,顯然Struts正在將系統屬性注入到我的地圖中。 但是為什么這樣做呢? 我沒有要求它這樣做。 我沒有使用特殊的XML配置或注釋。 Struts的哪一部分(什么攔截器)對此負責? 我剛發現一個錯誤,還是這是正常現象? 如果正常,為什么Struts開發人員認為應該為每個Map<String, Map<String, Object>>注入系統屬性是明智的選擇?

我只是自己嘗試過,我的猜測是正確的。 您在此處輸入的代碼不會產生任何此類結果。 您可以通過查看代碼輕松地自己發現這一點。 地圖上沒有東西,只有吸氣劑和吸氣劑。

"So apparently Struts is injecting the system properties into my map"

如果將參數傳遞給該操作(例如使用表單),則Struts將在該操作中尋找其相應的setter方法。 這表明在代碼,表單或參數中的某處,您已將稱為"map"傳遞給此Action。

首先查看您的struts.xml然后查看是否在其中設置一些參數。 如果不是,則仔細查看您從何處調用操作以及將其發送給什么參數。 然后,您應該能夠找到要在地圖上傳遞的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM