2014-04-04 26 views
1

我有一段时间试图在实现会话的Struts2包中使JSON调用工作。每当我进行调用时,都会调用适当的执行方法,但不会调用任何getter方法。因此,没有数据被返回到页面。这里是我的struts.xmlJSON调用不会与会话包一起工作

<package name="agreements" extends="default" namespace="/agreements"> 
     ... 
</package> 

<package name="new-wizard" extends="agreements, json-default" namespace="/new-wizard"> 
    <interceptors> 
     <interceptor-stack name="agreementsStack"> 
      <interceptor-ref name="scope"> 
       <param name="session">agreements, financialReportFirstReport, performanceReportFirstReport, tbvId, hasModification, tbvLoaded, subContractorGoals</param> 
       <param name="key">partialAgreements</param> 
      </interceptor-ref> 
     <interceptor-ref name="paramsPrepareParamsStack"/> 
     </interceptor-stack> 
    </interceptors> 
    <default-interceptor-ref name="agreementsStack" /> 
... 

    <action name="subContractorGoals" class="com.mycompany.webapp.action.AgreementsSubContractorWizardAction" method="subContractorGoals"> 
     <result type="json"> 
      <param name="includeProperties">subContractorGoals.*</param> 
     </result> 
    </action> 
</package> 

这是我的javascript:

var goals = null; 
$.ajax({ 
       async: false, 
       type:'GET', 
       dataType:'json', 
       url:"../new-wizard/subContractorGoals", 
       success:function(data) { 
        console.log("dataStringify = " + JSON.stringify(data)); 

        goals = data.subContractorGoals; 
       } 
      }); 

输出到我的控制台始终是相同的 - {}。我回来了一个对象,但它是空的。我感到困惑的是,如果我采取完全相同的行动并将其放入另一个包中,它就会起作用。

<package name="json" extends="default, json-default" namespace="/json"> 
    <action name="subContractorGoals" class="com.mycompany.webapp.action.AgreementsSubContractorWizardAction" method="subContractorGoals"> 
     <result type="json"> 
      <param name="includeProperties">subContractorGoals.*</param> 
     </result> 
    </action> 
</package> 

的Java:

@SkipValidation 
public String subContractorGoals() 
{ 
    try 
    { 
     this.subContractorGoals = new HashMap<String, Double>(); 
        this.subContractorGoals.put("test", 1.0); 
     return SUCCESS; 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
    return ERROR; 
} 

,并从以前的javascript我的结果(包名称改为当然/json)是{"subContractorGoals":{"test":"1.0"}}

我真的不知所措到发生了什么。

回答

0

试着改变你的栈的拦截器的顺序:

<interceptor-stack name="agreementsStack"> 

    <interceptor-ref name="paramsPrepareParamsStack"/> 

    <interceptor-ref name="scope"> 
     <param name="session">agreements, financialReportFirstReport, 
           performanceReportFirstReport, tbvId, 
           hasModification, tbvLoaded, subContractorGoals 
     </param> 
     <param name="key">partialAgreements</param> 
    </interceptor-ref> 

</interceptor-stack>