在使用modeldriven接口时,struts2中的列表选择不能改变 [英] List in struts2 select cant resoved when in use the modeldriven interface

查看:111
本文介绍了在使用modeldriven接口时,struts2中的列表选择不能改变的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,我在我的struts2应用程序中使用接口modeldriven。我有一个问题渲染页面,因为我总是得到一个错误:

Hello I use the interface modeldriven in my struts2 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;
    }
}

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文件 / p>

JSP file :

<%@ 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 以外的方法,并且只有此方法初始化列表。如果列表未初始化,则会出现上述错误。如果您有其他方法没有显示您应该实现 Preparable ,并移动在其中初始化列表的代码。

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"));
  }
  ...
}

这篇关于在使用modeldriven接口时,struts2中的列表选择不能改变的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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