在struts2的下拉列表中显示JSON数据

时间:2013-04-05 05:39:33

标签: ajax json struts2 drop-down-menu

我的代码做得很好。但我对一个问题感到震惊。我想在struts2的选择框中填充json数据。

我正在做的是......我正在点击按钮发送ajax请求并显示表单。

表单最初的属性显示为none。当我点击按钮时,它会变为阻止。

但每当我将jsp页面打开浏览器时,就会出现一个错误。

  

请求的列表键“类别”无法解析为   集合

我的struts.xml

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.custom.i18n.resources" value="LoginAction" />
    <package name="default" extends="struts-default" namespace="/">
        <action name="Login" class="com.agents.cb.LoginAction" >
            <result name="success" type="redirect">Welcome.jsp</result>
            <result name="input">login.jsp</result>
        </action>
        <action name="Register" method="register" class="com.agents.cb.LoginAction"  >
            <result name="success">login.jsp</result>
        </action>
    </package>
    <package name="admin" extends="json-default" namespace="/admin">
        <action name="addCategory" method="addCategory" class="com.type.user.Admin"  >
            <result type="json">
                <param name="excludeNullProperties">true</param>
                <param name="excludeProperties">
                    catName,catCode
                </param> 
            </result>
        </action>
        <action name="categories" method="categories" class="com.type.user.Admin"  >
            <result type="json">
                <param name="excludeNullProperties">true</param>
                <param name="excludeProperties">
                    catName,catCode,status
                </param> 
            </result>
        </action>
    </package> </struts>

Admin.java文件

package com.type.user;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.opensymphony.xwork2.ActionSupport;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;

import com.type.product.*;

public class Admin extends ActionSupport {
    private String catCode;
    private String catName;
    private HttpServletRequest request;
    private Map<String, String> categories = new HashMap<String, String>();;

    private String status;

    public Map<String, String> getCategories() {
        return categories;
    }

    public void setCategories(Map<String, String> categories) {
        this.categories = categories;
    }

    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }

    public String getCatCode() {
        return catCode;
    }

    public void setCatCode(String catCode) {
        this.catCode = catCode;
    }

    public String getCatName() {
        return catName;
    }

    public void setCatName(String catName) {
        this.catName = catName;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String addCategory() {
        Product prod = new Product();
        boolean flag = prod.addCat(catCode, catName);
        //boolean flag=false;
        if (flag) {
            status=catName+" added successfully.";
            return SUCCESS;
        } else {
            status="Error occurred while adding "+catName;
            return SUCCESS;
        }
    }

    public String categories(){
        System.out.println("step 1");
        Product prod=new Product();
        categories=prod.getAllCategories();
        return SUCCESS;
    }
}

我在jsp页面上的脚本

$(".add_sub_category").click(function(e){
                e.preventDefault();
                $.ajax({
                    url : '/Login/admin/categories',
                    type : 'POST',
                    dataType : 'json',
                    sucess : function(resp) {
                        console.log(resp);
                    }
                });             
            });

请帮忙。我做错了什么?为什么我有这个问题。

1 个答案:

答案 0 :(得分:0)

你声明了这个

<package name="admin" extends="json-default" namespace="/admin">
    <action name="categories" method="categories" class="com.type.user.Admin"  >

但您正试图在

处调用它
url : '/Login/admin/categories',

将其更改为您声明的路径:

url : '/admin/categories',

因为Login没有在任何地方定义为命名空间的一部分。

使用不同的命名空间时也要注意......

希望有所帮助