2

私は自分のコードでうまくいっていました。しかし、私は1つの問題に直面しています。struts2 の選択ボックスに json データを入力したいと考えています。

私がやっていることは..ボタンのクリックでajaxリクエストを送信し、フォームを表示しています。

フォームには、最初はプロパティ display none があります。ボタンをクリックすると、ブロックに変わります。

しかし、ブラウザで JSP ページを開くたびに 1 つのエラーが発生します。

要求されたリスト キー 'categories' をコレクションとして解決できませんでした

私の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);
                    }
                });             
            });

助けてください。私はどこで間違っていますか?そして、なぜ私はこの問題を抱えているのですか。

4

1 に答える 1

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 は名前空間の一部としてどこにも定義されていないためです。

異なる名前空間で遊ぶときも注意してください...

それが役立つことを願っています

于 2013-04-05T07:37:51.653 に答える