StrutsActionProxy:如何设置方法



我使用的是openSymphony 2.1.2,我有一些旧代码是为openSymphony2.1.2的旧版本编写的。

正如您所看到的,它告诉我ActionProxy没有方法setMethod(String)。可能以前有。但现在不行了。

但它仍然有一个方法CCD_ 3。那么,怎么会有一个我可以得到但不能设置的方法变量呢?如何在新的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。

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

Struts2.0下的动作单元测试。第2部分

该代码在我的项目使用的openSymphony和Struts版本中失败了。因此,我正在尝试将该代码升级到openSymphony和Struts的新版本。

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

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

然后您应该扩展DefaultActionProxyFactory并在createActionProxy()中替换DefaultActionProxy

之后修改struts.xml并覆盖

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

拥有自己的工厂。

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

只需使用ActionProxyFactory的适当createActionProxy方法,该方法将methodName作为参数之一。

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

相关内容

  • 没有找到相关文章