struts2-json-plugin没有从Struts-JQuery-Plugin网格的动作类中检索json数据

时间:2010-05-22 05:32:46

标签: jquery json struts2

我有一个问题让json使用struts-jquery-plugin-2.1.0

我也在我的类路径中包含了struts2-json-plugin-2.1.8.1。 我确定我的struts-jquery-plugin配置正确,因为网格加载了,但是没有加载它应该从json'ized的动作类中得到的数据。

使用json插件和struts-jquery插件的文档留下了很多我甚至无法通过示例/教程找到的空白,所以我来到stackoverflow社区。

我的action类有一个名为gridModel的属性,它使用一个名为Customer的基本POJO列表。客户是一个有一个属性的pojo,id。 我有一个工厂,将填充的List提供给我提到的动作List属性,名为gridModel。

以下是我如何设置我的struts.xml文件:

<constant name="struts.devMode" value="true"/>
<constant name="struts.objectFactory" value="guice"/>

<package name="org.webhop.ywdc" namespace="/" extends="struts-default,json-default">

<result-types>
    <result-type name="json" class="com.googlecode.jsonplugin.JSONResult">

    </result-type>
</result-types>
    <action name="login" class="org.webhop.ywdc.LoginAction" >

            <result type="json"></result>
            <result name="success" type="dispatcher">/pages/uiTags/Success.jsp</result>
           <result name="error" type="redirect">/pages/uiTags/Login.jsp</result>
            <interceptor-ref name="cookie">
                <param name="cookiesName">JSESSIONID</param>
            </interceptor-ref>
    </action>
    <action name="logout" class="org.webhop.ywdc.LogoutAction" >

           <result name="success" type="redirect">/pages/uiTags/Login.jsp</result>
    </action>
</package>

在struts.xml文件中我设置了 在我列出的行动中 在动作配置中。

这是动作加载的jsp页面:

                       欢迎您,您已登录!                                           欢迎您,您已登录。
    会话时间:
  <h2>Password:<s:property value="password"/></h2>

  <h2>userId:<s:property value="userId"/></h2>
  <br />
  <a href="<%= request.getContextPath() %>/logout.action">Logout</a><br /><br />
 ID: <s:property value="id"/>
 session id: <s:property value="JSESSIONID"/>

</body>

我不确定如何判断json插件从动作类创建的json。 如果我知道我怎么知道它是不是形成得当。 据我所知,如果我在我的动作配置中具体说明 在struts.xml中,设置为读取json并知道要查找“gridModel”的网格将自动将json加载到网格中,但不是。

继承我的行动课:

公共类LoginAction扩展了ActionSupport {

  public String JSESSIONID;
  public int id;
  private String userId;
  private String password;
  public Members member;
  public List<Customer> gridModel;

  public String execute()
  {
            Cookie cookie = new Cookie("ywdcsid", password);
            cookie.setMaxAge(3600);
            HttpServletResponse response = ServletActionContext.getResponse();
            response.addCookie(cookie);

            HttpServletRequest request = ServletActionContext.getRequest();
            Cookie[] ckey = request.getCookies();
            for(Cookie c: ckey)
            {
                System.out.println(c.getName() + "/cookie_name + " + c.getValue() + "/cookie_value");
            }
            Map requestParameters = ActionContext.getContext().getParameters();//getParameters();
            String[] testString = (String[])requestParameters.get("password");
            String passwordString = testString[0];
            String[] usernameArray = (String[])requestParameters.get("userId");
            String usernameString = usernameArray[0];

            Injector injector = Guice.createInjector(new GuiceModule());
            HibernateConnection connection = injector.getInstance(HibernateConnection.class);
            AuthenticationServices currentService = injector.getInstance(AuthenticationServices.class);
            currentService.setConnection(connection);
            currentService.setInjector(injector);
            member = currentService.getMemberByUsernamePassword(usernameString, passwordString);
            userId = member.getUsername();
            password = member.getPassword();

            CustomerFactory customerFactory = new CustomerFactory();
            gridModel = customerFactory.getCustomers();

            if(member == null)
            {
                return ERROR;
            }
            else
            {
                id = member.getId();
                Map session = ActionContext.getContext().getSession();
                session.put(usernameString, member);
                return SUCCESS;
            }   
  }

    public String logout() throws Exception 
    {
        Map session = ActionContext.getContext().getSession();
        session.remove("logged-in");
        return SUCCESS;
    }
    public List<Customer> getGridModel()
    {
        return gridModel;
    }
    public void setGridModel(List<Customer> gridModel)
    {
        this.gridModel = gridModel;
    }
    public String getPassword() 
    {
        return password;
    }

    public void setPassword(String password) 
    {
        this.password = password;
    }

    public String getUserId() 
    {
        return userId;
    }

    public void setUserId(String userId) 
    {
        this.userId = userId;
    }
    public String getJSESSIONID() {
        return JSESSIONID;
    }

    public void setJSESSIONID(String jsessionid) {
        JSESSIONID = jsessionid;
    }

}

请帮我解决这个问题。你将完成我的一周,因为这是一个专业 我的瓶颈:(

非常感谢,

thebravedave

1 个答案:

答案 0 :(得分:0)

事实证明我没有正确设置我的struts.xml配置文件。 我在我用于返回非json数据的同一个动作类中放了一个json返回。 不要这样做。创建另一个专门只返回json数据的动作类 继承人我的struts.xml [码]          

<package name="org.webhop.ywdc" namespace="/" extends="struts-default">


    <action name="login" class="org.webhop.ywdc.LoginAction">
            <interceptor-ref name="params"/>
            <interceptor-ref name="cookie">
                <param name="userId" />
            </interceptor-ref>

            <result name="success" type="dispatcher">/pages/Success.jsp</result>
            <result name="error" type="dispatcher">/pages/Login.jsp</result>
    </action>

    <action name="logout" class="org.webhop.ywdc.LogoutAction" >
           <result name="success" type="dispatcher">/pages/Login.jsp</result>
    </action>
    <action name="editcellentry" class="org.webhop.ywdc.EditCellEntryAction">
         <result name="success" type="dispatcher">/pages/Success.jsp</result>
    </action>
</package>

<package name="example" namespace="/" extends="json-default">
    <result-types>
        <result-type name="json" class="com.googlecode.jsonplugin.JSONResult"/>
    </result-types>
    <action name="jsonaction" class="example.JsonAction">
        <result type="json" />  
    </action>
</package>

[/码] 您会注意到我甚至将它放在一个专门扩展json-default的新包中。 我还遇到了这样的问题,我最初将我的json root设置为List集合,我将其设置为我的集合,将其序列化为json数据。 如果你不这样做,它将为每个集合序列化getter for setters。 如果将集合设置为json的根,则它不会返回带有json数据的集合的名称,您需要在jsp页面中网格配置的gridModel参数中设置网格所在的参数。 使用firebug返回你的json,并确保返回的json的名称与你在gridModel中定义的值匹配。