在Struts 2中使用ModelDriven接口时,无法解析select标记中的list属性 [英] The list attribute in select tag can't be resolved when using ModelDriven interface in Struts 2

查看:61
本文介绍了在Struts 2中使用ModelDriven接口时,无法解析select标记中的list属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Struts 2应用程序中使用接口 ModelDriven .我在呈现页面时遇到问题,因为我总是遇到错误:

I use the interface ModelDriven in my Struts 2 application. I have a problem rendering the page because I always get an error:

19 nov. 2013 11:23:12 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: "Servlet.service()" pour la servlet jsp a généré une exception
tag 'select', field 'list': The requested list key 'listeItems' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location]
        at org.apache.struts2.components.Component.fieldError(Component.java:240)
        at org.apache.struts2.components.Component.findValue(Component.java:333)
        at org.apache.struts2.components.ListUIBean.evaluateExtraParams(ListUIBean.java:80)

我不知道哪里出了问题,所以我给社区带来了困扰.

I don't know where is the error so I call distress to the community.

struts.xml :

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.devMode" value="false" />
    <constant name="struts.action.extension" value="do" />
    <constant name="struts.custom.i18n.resources" value="com.omb.i18n.StrutsResourceBundle" />
    <constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" /> 
    <constant name="struts.objectFactory.spring.autoWire" value="name" />
    <constant name="struts.i18n.encoding" value="ISO-8859-1" />
    <constant name="struts.i18n.reload" value="false" />
    <constant name="struts.configuration.xml.reload" value="false" />
    <constant name="struts.locale" value="fr" />
    <constant name="struts.multipart.maxSize" value="100000000000" />
    <constant name="struts.enable.SlashesInActionNames" value="true" />
    <constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
 
    <constant name="struts.codebehind.classSuffix" value="Controller"/>
    <constant name="struts.codebehind.action.checkImplementsAction" value="false"/>
    <constant name="struts.codebehind.action.checkAnnotation" value="false"/>
    <constant name="struts.codebehind.action.defaultMethodName" value="index"/>
    <constant name="struts.configuration.classpath.defaultParentPackage" value="rest-default" />
 
    <package name="default" extends="tiles-default" namespace="/">
 
        <interceptors>
 
            <interceptor name="params-filter"
                class="com.opensymphony.xwork2.interceptor.ParameterFilterInterceptor" />
 
            <interceptor-stack name="defaultStack">
                <interceptor-ref name="exception" />
                <interceptor-ref name="alias" />
                <interceptor-ref name="servletConfig" />
                <interceptor-ref name="i18n" />
                <interceptor-ref name="chain" />
                <interceptor-ref name="modelDriven" />
                <interceptor-ref name="fileUpload">
                    <param name="maximumSize">11204928</param>
                </interceptor-ref>
                <interceptor-ref name="staticParams" />
                <interceptor-ref name="conversionError" />
                <interceptor-ref name="params" />
                <interceptor-ref name="prepare" />
                                <interceptor-ref name="basicStack"/>
                <interceptor-ref name="validation" />
                <interceptor-ref name="workflow" />
            </interceptor-stack>
 
        </interceptors>
 
        <default-interceptor-ref name="defaultStack" />
 
        <global-results>
            <result name="technicalError" type="chain">
                errorAction
            </result>
            <result name="sessionInvalidError" type="tiles">
                sessionInvalid
            </result>
            <result name="blank" type="tiles">blank</result>
        </global-results>
 
        <global-exception-mappings>
            <exception-mapping exception="java.lang.Exception"
                result="technicalError" />
            <exception-mapping
                exception="com.omb.service.exception.UserSessionInvalidException"
                result="sessionInvalidError" />
 
        </global-exception-mappings>
 
    </package>
 
    <package name="omb" extends="default" namespace="/omb">
        <action name="*Action" class="myAction" method="{1}">
            <result name="success" type="redirectAction">
                <param name="namespace">/omb</param>
                <param name="actionName">displayResult</param>
            </result>
            <result name="error" type="redirectAction">
                <param name="namespace">/error</param>
                <param name="actionName">displayError</param>
            </result>
        </action>
    </package>
</struts>

MyAction.java :

MyAction.java:

package com.omb.actions;
 
public class MyAction extends ActionSupport implements ModelDriven<MyModel>{
 
    private MyModel myModel = new MyModel();
    
    public MyModel getModel() {
        return myModel;
    }
 
    public String execute() throws Exception {
        myModel.add(new Item("A", "Item A"));
        myModel.add(new Item("B", "Item B"));
        return SUCCESS;
    }
    
    public String doAction() {
        // do something
        return "SUCCESS";
    }
 
    public MyModel getMyModel() {
        return this.myModel;
    }
 
    public void setMyModel(MyModel myModel) {
        this.myModel = myModel;
    }
}

MyModel.java :

MyModel.java:

package com.omb.modele;

import java.util.ArrayList;
import java.util.List;

import com.omb.item.Item;

public class MyModel {

    private String idItem;

    private List<Item> listeItems = new ArrayList<Item>();

    public String getIdItem() {
        return this.idItem;
    }

    public void setIdItem(String idItem) {
        this.idItem = idItem;
    }

    public List<Item> getListeItems() {
        return this.listeItems;
    }

    public void setListeItems(List<Item> listeItems) {
        this.listeItems = listeItems;
    }
}

Item.java :

Item.java:

package com.omb.item;

import java.io.Serializable;

public class Item implements Serializable {

    private static final long serialVersionUID = 1L;

    private String id;

    private String label;
 
    public Item() {
        super();    
    }

    public Item(String id, String label) {
        this.id = id;
        this.label = label;
    }
    
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getLabel() {
        return label;
    }

    public void setLabel(String label) {
        this.label = label;
    }
}

JSP文件:

<%@ taglib prefix="s" uri="/struts-tags"%>

<table width="100%">

    <tr>
        <td><label><s:property value="%{getText('label')}" /></label></td>
    </tr>
    <tr>
        <td><s:select id="idSelectItem"
                emptyOption="true" list="listeItems" value="idItem"
                listKey="id" listValue="label" />
        </td>
    </tr>

</table>

推荐答案

删除 method =" {1}",因为您不使用通配符映射,并且操作没有 execute 以外的其他方法,只有此方法才能初始化列表.如果列表未初始化,则会发生上述错误.如果您还有其他未显示的方法,则应实现

Remove method="{1}" because you don't not use wildcard mapping and your action doesn't have methods other than execute and only this method initializes the list. If the list is not initialized the error like above occur. If you have other methods didn't show there you should implement Preparable for the action and move the code that initializes the list there.

public class MyAction extends ActionSupport implements ModelDriven<MyModel>, Preparable {

  public void prepare() {
    myModel = new MyModel();
    myModel.add(new Item("A", "Item A"));
    myModel.add(new Item("B", "Item B"));
  }
  ...
}

这篇关于在Struts 2中使用ModelDriven接口时,无法解析select标记中的list属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆