我使用的是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