Struts2中的奇怪行为

时间:2012-06-14 08:05:10

标签: java 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 required并执行操作。 您将在控制台上看到以下输出 -

{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>>注入系统属性是明智的?

1 个答案:

答案 0 :(得分:0)

我自己试过这个,我的猜测是正确的。 您在此处提供的代码不会产生任何此类结果。您可以通过查看代码轻松地发现这一点。没有什么东西填充地图,它只是吸气剂和制定者。

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

如果将参数传递给此操作,例如使用表单,Struts将在操作中查找其对应的setter-method。这表示代码,表单或参数中的某个位置,您有一个名为"map"的内容已传递给此操作。

首先查看struts.xml,看看你是否在那里设置了一些参数。如果没有,那么仔细查看您调用操作的位置以及发送它的参数。那么你应该能够找到你在地图中传递的位置。