使用ModelDriven Interceptor时无法在struts 2 jqGrid中获取JSON对象

时间:2014-06-09 16:52:58

标签: java jquery json jsp struts2

您好我正在我的JSP中创建一个类似于下面的网格

   <sjg:grid gridModel="gridModel"  
          ---- other options -- >


   </sjg:grid>

在我的struts.xml中

我正在给出这个动作序列

    <action name = "jsonAction" calss == "Action class" method = "methodName" >
      <interceptor-ref name="modelDriven" />
       <interceptor-ref name="basicStack" />
     <result name="success" type="json" >
        </result>
     </action>

我的行动类

        public myClass extends ActionSupport implements ModelDriven<BeanClass>
        {
            //My list haveing getters and setters
              public gridModel getGridModel()
               {
                  return gridModel;
                 }
              public void setGridModel(List gridModel)
            { 
                  this.gridModel = gridModel;
             }

           public String methodName()
               {
                  //code here to get the list
                 }

            public BeanClass getModel()
                {

                 return new BeanClass();
                 }

          }

我怀疑的是,当我不使用ModelDriven拦截器时我可以构建网格..如果使用我无法绑定jqGrid中的列表..

我确实谷歌问题但是我找不到合适的解决方案..据我所知,当使用ModelDriven拦截器时会发生问题..这个拦截器会将动作对象保持在{{1 }}

即使我尝试使用ValueStack但没有运气..

请有人帮忙

Thnx提前

编辑 - 1

[1].top

我刚刚做了你所说的我需要在 I am implementing ModelDrive Interface as you said I am missing some specialization I think I have done what you said but still no luck. Dont know where i am missing.

中改变一切

Stil无法获取GRID中的数据

1 个答案:

答案 0 :(得分:2)

  

即使我尝试使用[1] .top但没有运气..

top引用堆栈顶部的对象。 [1].top通过索引1在堆栈中引用top对象。在第一种情况下,它是在堆栈上推送的模型,在第二种情况下,它是在创建后在堆栈上推送的动作bean。我猜第二个包含在操作返回json结果时提供给网格所需的属性。这些属性在json结果的include参数中提供。您的操作是通过ModelDriven接口实现的,但具有错误的专业化。如果您的action bean包含应该序列化为JSON的属性,那么该模型应该是action bean。如果你编写像

这样的动作bean,你可以这样做
public MyClass extends ActionSupport implements ModelDriven
{

  //My list haveing getters and setters
  public String methodName()
  {
    //code here to get the list
  }

  @Override
  public Object getModel() 
  {
    return this;
  }

}