Перехватчик JSON Struts2 не заполняет мой класс Action - PullRequest
1 голос
/ 17 января 2012

Я работаю над веб-приложением, в котором клиентская библиотека JavaScript (ExtJS) отправляет запросы в мой бэкэнд с поддержкой Struts с полезной нагрузкой JSON-запроса.Моя проблема в том, что я не могу понять, как получить переменные из полезной нагрузки в мой класс Action.

Я знаю, используя операторы журнала, что из моего интерфейса вызывается правильный метод в моем классе действий.Просто я ожидаю переменные null, когда их не должно быть.

Я пытаюсь использовать struts2-json-plugin в качестве перехватчика.Перехватчики Struts являются новыми для меня, и я не смог найти в Интернете каких-либо четких примеров использования struts2-json-plugin.

Вот зависимости Struts в моем pom.xml:

<dependency>
  <groupId>org.apache.struts</groupId>
  <artifactId>struts2-core</artifactId>
  <version>2.2.3.1</version>
</dependency>
<dependency>
   <groupId>org.apache.struts</groupId>
   <artifactId>struts2-json-plugin</artifactId>
   <version>2.2.3.1</version>
</dependency>        

Вот тело запроса (заботится о Firebug):

{"id":15,"translation":"Blah blah"}

Соответствующие части моего класса Action выглядят так:

public class TranslationsAction extends ActionSupport {

    private Long id;
    private String translation;

    public String save() throws Exception {

        log.debug("TranslationsAction.save() called.");
        log.debug("ID: " + this.id + ", Translation: " + this.translation);

        return "{\"foo\":\"bar\"}";
    }

    public void setId(Long id) {
        this.id = id;
    }

    public void setTranslation(String translation) {
        this.translation = translation;
    }

}

Здесь актуальнычасти моего struts.xml:

<package name="foo" namespace="/foobar" extends="json-default">    
    <action name="save-translation" method="save"
            class="my.package.name.action.TranslationsAction">
        <result name="success">/jsp/json.jsp</result>
    </action>
</package>

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 17 января 2012

Я сам нашел проблему.Мне не удалось правильно настроить struts.xml.Мне нужно было сначала определить перехватчик в моем пакете, а затем сказать, что я должен его использовать, например:

<package name="foo" namespace="/foobar" extends="json-default">    

    <!-- Added this: -->
    <interceptors>
        <interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>
    </interceptors>

    <action name="save-translation" method="save"
            class="my.package.name.action.TranslationsAction">

        <!-- And added this: -->
        <interceptor-ref name="myDefaultInterceptorStack" />
        <interceptor-ref name="json" />

        <result name="success">/jsp/json.jsp</result>
    </action>
</package>

Это было глупое упущение с моей стороны.: - \

0 голосов
/ 17 января 2012

Что ж, плагину JSON необходимо выполнить некоторые шаги для правильной работы, и вот некоторые из них

  1. «Тип контента» должен быть «application / json».
  2. Содержимое JSON должно быть правильно сформировано, см. Json.org для грамматики.

Лучше, если вы сможете вставить соответствующую часть JS (ExtJS) из того места, где вы вызываете свой класс Action и отправляетеданные для вашего класса действий.

Пожалуйста, посмотрите на официальную страницу плагина JSON для деталей

json-plugin

...