Struts ActionProxy: как установить метод?

Я использую 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 из моей системы в системе, основанной на другой платформе.

2 ответа

Решение

DefaultActionProxy реализует ActionProxy, Чтобы установить method атрибут, который вы должны расширить DefaultActionProxy и установите супер защищенный атрибут через ваш setMethod реализация.

Тогда вы должны продлить DefaultActionProxyFactory и заменить DefaultActionProxy в createActionProxy(),

После этого модифицируем struts.xml и переопределить

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

с вашей собственной фабрикой.

Но желательно установить метод в параметрах с method: префикс или использование setMethod в ActionMapping класс, который вы могли бы получить от ActionContext или вы можете продлить DefaultActionMapper чтобы получить необходимое вам отображение. Смотрите документы.

Просто используйте соответствующие createActionProxy метод ActionProxyFactory который занимает 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

Другие вопросы по тегам