2014-01-04 1 views
2

struts.xml:includeProperties не работает?

<action name="findTspNameIdMap" 
      class="cdot.oss.cmsat.gma.struts.ConfigureTspThresholdAction" method="findTspNameIdMap"> 

      <result name="success" type="json"> 
       <param name="includeProperties">result,tspNameIdMap.*</param> 
      </result> 

      <result name="error">pages/Error.jsp</result> 

     </action> 

Действие Класс:

public class ConfigureTspThresholdAction extends ActionSupport implements SessionAware, ModelDriven<GmaThresholdParameter>{ 


    private Map<String,Object> session; 
    private String operatorId; 

    private Map<String,String> tspNameIdMap; 
    private String result = "success"; 

    //private List<String> thresholdParameters; 
    GmaThresholdParameter gmaThresholdParameters = new GmaThresholdParameter(); 

я делаю вызов AJAX к действию, когда я проверяю в Firebug ответ JSON это: {}. Однако, если я делаю <param name="root">tspNameIdMap</param>, это работает, но не includeProperties.

Раньше он работал, но я внес некоторые изменения кода (не связанные с этой частью кода), и он прекратил работать. Изменения кода включали внедрение ModelDriven для POJO.

Почему не работает? Любая помощь?

ответ

3

РЕШИТЬ:

struts.xml:

<result name="success" type="json"> 
     <param name="root">action</param>   
     <param name="includeProperties">result,tspNameIdMap.*</param> 
    </result-type> 

Я добавил <param name="root">action</param> в мой код и решить эту проблему.

Обратитесь к этой ссылке, откуда я решил: http://blog.mattsch.com/2011/04/14/things-discovered-in-struts-2/

Поскольку Struts 2.2.3 корневой объект всегда рассматривается как модель, если действие модель> приводом. Это означает, что при создании запроса JSON только модель будет сериализована. В некоторых случаях можно использовать модель для получения запросов и отправить что-то еще в ответ>. Затем корень должен быть изменен. Это можно сделать, установив параметр root>, как показано выше.

+0

Как OGNL мог найти 'action' объект? –

+0

@RomanC: Действие на ValueStack, я думаю. –

+0

Действие находится в стек значений, но вы не можете получить к нему доступ с этим выражением. –

0

использование

<result name="success" type="json">  
    <param name="includeProperties">result,tspNameIdMap*.*</param> 
</result-type> 

После парам не требуется, я нашел тот же результат с и без этого

<param name="root">action</param>