gpt4 book ai didi

java - Struts2 中的奇怪行为

转载 作者:行者123 更新时间:2023-12-01 05:16:52 26 4
gpt4 key购买 nike

我正在研究 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 正在将系统属性注入(inject)到我的 map 中。但为什么要这样做呢?我没有要求它这样做。我没有使用任何特殊的 XML 配置或注释。Struts 的哪一部分(什么拦截器)负责这个?我刚刚发现了一个错误还是这是正常行为?如果这是正常的,为什么 Struts 开发人员认为注入(inject)每个 Map<String, Map<String, Object>> 是明智的?与系统属性?

最佳答案

我自己尝试了一下,我的猜测是正确的。您在此处发布的代码不会产生任何此类结果。您可以通过查看代码轻松地自己发现这一点。 map 上没有任何内容,只有 getter 和 setter。

“显然 Struts 正在将系统属性注入(inject)到我的 map 中”

如果您将参数传递给此操作(例如使用表单),Struts 将在该操作中查找其相应的 setter 方法。这表明在您的代码、表单或参数中的某个位置,您有一个名为 "map" 的东西传递给了此 Action。

首先查看 struts.xml 并查看是否在那里设置一些参数。如果没有,请仔细查看您从何处调用该操作以及发送哪些参数。然后你应该能够在 map 中找到你要经过的地方。

关于java - Struts2 中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11029035/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com