Struts2列表无法';无法解决

Struts2列表无法';无法解决,struts2,struts,Struts2,Struts,请帮帮我。我要面对这个错误3天。我已经在网上搜索了所有的例子,但我没有找到答案 这些是我的文件: struts.xml 有人有主意吗?您需要添加implementpreparable和method prepare(),并在这个method prepare colors列表中 应该是这样的: public class MenuAction extends ActionSupport implements Preparable{ private ArrayList<String>

请帮帮我。我要面对这个错误3天。我已经在网上搜索了所有的例子,但我没有找到答案

这些是我的文件:

struts.xml


有人有主意吗?

您需要添加implementpreparable和method prepare(),并在这个method prepare colors列表中

应该是这样的:

public class MenuAction extends ActionSupport implements Preparable{
    private ArrayList<String> colors;
    private String yourColor;

    public ArrayList<String> getColors() {
        return colors;
    }

    public void setColors(ArrayList<String> colors) {
        this.colors = colors;
    }

    public String getYourColor() {
        return yourColor;
    }

    public void setYourColor(String yourColor) {
        this.yourColor = yourColor;
    }

    public String asdf() {
        colors = new ArrayList<String>();
        colors.add("red");
        colors.add("yellow");
        colors.add("blue");
        colors.add("green");

        return SUCCESS;
    }

    @Override
    public String execute() {
        System.out.println("execute menu action");


        return SUCCESS;
    }
    public void prepare() throws Exception {
        colors = new ArrayList<String>();
        colors.add("red");
        colors.add("yellow");
        colors.add("blue");
        colors.add("green");

    }
}
public class MenuAction扩展了ActionSupport实现了可准备的{
私有数组列表颜色;
私人色彩;
公共阵列列表getColors(){
返回颜色;
}
公共void集合颜色(ArrayList颜色){
这个。颜色=颜色;
}
公共字符串getYourColor(){
返回你的颜色;
}
public void setYourColor(字符串yourColor){
this.yourColor=yourColor;
}
公共字符串asdf(){
颜色=新的ArrayList();
颜色。添加(“红色”);
颜色。添加(“黄色”);
颜色。添加(“蓝色”);
颜色。添加(“绿色”);
回归成功;
}
@凌驾
公共字符串execute(){
System.out.println(“执行菜单操作”);
回归成功;
}
public void prepare()引发异常{
颜色=新的ArrayList();
颜色。添加(“红色”);
颜色。添加(“黄色”);
颜色。添加(“蓝色”);
颜色。添加(“绿色”);
}
}

您需要添加implement Preparable和method prepare(),并在此method prepare colors列表中

应该是这样的:

public class MenuAction extends ActionSupport implements Preparable{
    private ArrayList<String> colors;
    private String yourColor;

    public ArrayList<String> getColors() {
        return colors;
    }

    public void setColors(ArrayList<String> colors) {
        this.colors = colors;
    }

    public String getYourColor() {
        return yourColor;
    }

    public void setYourColor(String yourColor) {
        this.yourColor = yourColor;
    }

    public String asdf() {
        colors = new ArrayList<String>();
        colors.add("red");
        colors.add("yellow");
        colors.add("blue");
        colors.add("green");

        return SUCCESS;
    }

    @Override
    public String execute() {
        System.out.println("execute menu action");


        return SUCCESS;
    }
    public void prepare() throws Exception {
        colors = new ArrayList<String>();
        colors.add("red");
        colors.add("yellow");
        colors.add("blue");
        colors.add("green");

    }
}
public class MenuAction扩展了ActionSupport实现了可准备的{
私有数组列表颜色;
私人色彩;
公共阵列列表getColors(){
返回颜色;
}
公共void集合颜色(ArrayList颜色){
这个。颜色=颜色;
}
公共字符串getYourColor(){
返回你的颜色;
}
public void setYourColor(字符串yourColor){
this.yourColor=yourColor;
}
公共字符串asdf(){
颜色=新的ArrayList();
颜色。添加(“红色”);
颜色。添加(“黄色”);
颜色。添加(“蓝色”);
颜色。添加(“绿色”);
回归成功;
}
@凌驾
公共字符串execute(){
System.out.println(“执行菜单操作”);
回归成功;
}
public void prepare()引发异常{
颜色=新的ArrayList();
颜色。添加(“红色”);
颜色。添加(“黄色”);
颜色。添加(“蓝色”);
颜色。添加(“绿色”);
}
}

有三种方法

  • 根据我的理解,如果我们在类级别初始化所有集合对象,那么这个问题就不会发生,当特定的操作在那个时候被触发时,JSP页面不知道字段的类型。在这种情况下,当你写 “
    私有数组列表颜色;
    ”将其改为

    private ArrayList colors=new ArrayList()

  • 像Tomasz Gutkowski之前说的那样使用prepare也很有效

  • 通过使用拦截器标记,我们也可以这样判断(包括在action标记中)

    拦截器ref name=“params”
    拦截器ref name=“prepare”
    拦截器ref name=“basicStack”


  • 有三种方法可以做到这一点

  • 根据我的理解,如果我们在类级别初始化所有集合对象,那么这个问题就不会发生,当特定的操作在那个时候被触发时,JSP页面不知道字段的类型。在这种情况下,当你写 “
    私有数组列表颜色;
    ”将其改为

    private ArrayList colors=new ArrayList()

  • 像Tomasz Gutkowski之前说的那样使用prepare也很有效

  • 通过使用拦截器标记,我们也可以这样判断(包括在action标记中)

    拦截器ref name=“params”
    拦截器ref name=“prepare”
    拦截器ref name=“basicStack”


  • 简单地说,您直接访问页面,即menu2.jsp,而不处理任何操作,因此不初始化列表。 执行一个操作并在到达menu2.jsp的过程中初始化列表 这就是错误所说的

    The requested list key 'colors' could not be resolved as a collection/array/map/enumeration/iterator type
    

    希望这有助于

    简单地说,您直接访问页面,即menu2.jsp,而无需处理任何操作,因此不需要初始化列表。 执行一个操作并在到达menu2.jsp的过程中初始化列表 这就是错误所说的

    The requested list key 'colors' could not be resolved as a collection/array/map/enumeration/iterator type
    

    希望这有帮助

    我也有同样的问题;我删除了struts xml验证,它运行良好

    我也遇到了同样的问题;我删除了struts xml验证,它工作正常

    请求的列表键“colors”无法解析为集合/数组/映射/枚举/迭代器类型

    尝试访问尚未创建的列表/集合时会发生此错误

    可能是您正在直接调用action,即LoaclHost:8080/youraction.action

    请确保在实例化action类后访问列表,即调用相应的action


    如果您想在调用操作之前直接访问它,请将其设置为静态并在jsp中访问它

    无法将请求的列表键“colors”解析为集合/数组/映射/枚举/迭代器类型

    尝试访问尚未创建的列表/集合时会发生此错误

    可能是您正在直接调用action,即LoaclHost:8080/youraction.action

    请确保在实例化action类后访问列表,即调用相应的action


    如果您想在调用操作之前直接访问它,请将其设置为静态并在jsp中访问它

    在从jsp文件中的action类访问任何字段之前,您需要确保创建了action类对象,并且正确初始化了要访问的字段

    在struts.xml中,对于操作“menu”,您已经配置为调用方法“asdf”。所以首先要注意的是,struts框架不会调用execute方法来执行您的操作“菜单”,而是调用ins
    public class MenuAction extends ActionSupport implements Preparable{
        private ArrayList<String> colors;
        private String yourColor;
    
        public ArrayList<String> getColors() {
            return colors;
        }
    
        public void setColors(ArrayList<String> colors) {
            this.colors = colors;
        }
    
        public String getYourColor() {
            return yourColor;
        }
    
        public void setYourColor(String yourColor) {
            this.yourColor = yourColor;
        }
    
        public String asdf() {
            colors = new ArrayList<String>();
            colors.add("red");
            colors.add("yellow");
            colors.add("blue");
            colors.add("green");
    
            return SUCCESS;
        }
    
        @Override
        public String execute() {
            System.out.println("execute menu action");
    
    
            return SUCCESS;
        }
        public void prepare() throws Exception {
            colors = new ArrayList<String>();
            colors.add("red");
            colors.add("yellow");
            colors.add("blue");
            colors.add("green");
    
        }
    }
    
    The requested list key 'colors' could not be resolved as a collection/array/map/enumeration/iterator type
    
    <!-- Define one extra action in struts.xml which redirects-->
    <action name="invokeMenuActionFirst" class="com.struts.actions.MenuAction" method="input">
        <result name="input">/menu2.jsp</result>
    </action>
    
    <a href="menu2.jsp">Link </a>
    <%-- Replace links similar to above created using plain html markup with following struts2 markup. --%>
    <a href="<s:url action='invokeMenuActionFirst'/>">Link </a>