2

我正在使用 openSymphony 2.1.2,并且我有一些为旧版本的 openSymphony 编写的旧代码。

如您所见,它告诉我ActionProxy没有方法setMethod(String)。它可能曾经有。但现在不是了

但它还是有方法的String getMethod()。那么如何有一个方法变量我可以得到,但不能设置?如何在新 API 中设置方法?

import com.opensymphony.xwork2.ActionProxy;

protected ActionProxy proxy = null;

//used to work with older versions of openSymphony, now there's a compilation error here:
//The method setMethod(String) is undefined for the type ActionProxy
proxy.setMethod(methodName);

更新:

我正在开发一个使用 openSymphony 2.1 的系统(不是我编写的)。和 Struts 2.3.8。

在该系统上,我正在尝试应用以下代码:

使用 Struts 2.0 进行动作单元测试。第2部分

该代码因我的项目使用的 openSymphony 和 Struts 版本而失败。所以我正在尝试将该代码升级到较新版本的 openSymphony 和 Struts。

我需要它以便能够在基于不同框架的系统中模拟从我的系统运行 struts 操作。

4

2 回答 2

1

DefaultActionProxy正在实施ActionProxy。要设置属性,您应该通过您的实现method扩展DefaultActionProxy和设置超级保护属性。setMethod

然后你应该扩展和DefaultActionProxyFactory替换DefaultActionProxy.createActionProxy()

之后修改struts.xml和覆盖

<bean type="com.opensymphony.xwork2.ActionProxyFactory" name="xwork" ... />

与您自己的工厂。

但最好在带有method:前缀的参数中设置方法,或者setMethod在您可以从 获得的ActionMapping类中使用,ActionContext或者您可以扩展DefaultActionMapper以获得所需的映射。请参阅文档

于 2013-04-04T18:48:20.327 回答
0

只需使用作为参数之一的适当createActionProxy方法即可。ActionProxyFactorymethodName

public ActionProxy createActionProxy(String namespace, String actionName,
    String methodName, Map<String, Object> extraContext, boolean executeResult,
    boolean cleanupContext);

或者

public ActionProxy createActionProxy(String namespace, String actionName,
    String methodName, Map<String, Object> extraContext);

或者

public ActionProxy createActionProxy(ActionInvocation actionInvocation,
    String namespace, String actionName, String methodName,
    boolean executeResult, boolean cleanupContext);

参见: http: //svn.apache.org/viewvc/struts/struts2/tags/STRUTS_2_3_8/xwork-core/src/main/java/com/opensymphony/xwork2/ActionProxyFactory.java ?view=markup

于 2013-04-04T20:19:45.247 回答