我正在研究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>>
注入系统属性是明智的?
答案 0 :(得分:0)
我自己试过这个,我的猜测是正确的。 您在此处提供的代码不会产生任何此类结果。您可以通过查看代码轻松地发现这一点。没有什么东西填充地图,它只是吸气剂和制定者。
"So apparently Struts is injecting the system properties into my map"
如果将参数传递给此操作,例如使用表单,Struts将在操作中查找其对应的setter-method。这表示代码,表单或参数中的某个位置,您有一个名为"map"
的内容已传递给此操作。
首先查看struts.xml
,看看你是否在那里设置了一些参数。如果没有,那么仔细查看您调用操作的位置以及发送它的参数。那么你应该能够找到你在地图中传递的位置。