Java Mailing List Archive

http://www.gg3721.com/

Home » Struts Users Mailing List »

<s:select> tag causing could not be resolved as a collection/array/map/enumeration/iterator type error

Mark Greene

2008-11-27

Replies: Find Java Web Hosting

Author LoginPost Reply
Hi All,

After a couple of days I can't seem to figure this validation problem out. I
have a basic JSP form (create.jsp) with a textfield (with validation) and a
select list (WITHOUT validation). When I submit the form to trigger a
validation failure on purpose, the text field is validated correctly and the
user input is still present, however, the select list disappears below it
and the following error is given:

ERROR [[default]] Servlet.service() for servlet default threw exception
tag 'select', field 'list', name 'catID': The requested list key
'categories' could not be resolved as a collection/array/map/enumeration/it
erator type. Example: people or people.{name} - [unknown location]

I've read about similar problems and they say to initialize the collections
in the prepare(). I did that and I'm still getting the problem. Another
solution I've heard was to put the Collection in the session. This doesn't
seem like a scalable solution for applications that are deployed in a
session replicated enviornement like clustering. Please tell me that putting
the list in the seseion isn't the only work around?

-----------------------------------------------------------------------------------------------------------
Action Code:
------------------------------------------------------------------------------------------------------------
public class CreateTicket extends ActionSupport implements Preparable {

  private Map categories;

  public Map getCategories() {
    return categories;
  }

  public void setCategories(Map categories) {
    this.categories = categories;
  }

  public String execute() throws Exception {
    this.prepare();
    return SUCCESS;
  }

  public void prepare() throws Exception {
    categories = new HashMap();
    categories.put(1, "test");
    categories.put(2, "test2");
    categories.put(3, "test3");
  }
}


public class HelloWorld extends ActionSupport {

  public static final String MESSAGE = "Struts is up and running ...";
  private String name;
  private Integer catID;

  public Integer getCatID() {
    return catID;
  }

  public void setCatID(Integer catID) {
    this.catID = catID;
  }

  public String execute() throws Exception {

    setMessage(MESSAGE + " " + getName());

    return SUCCESS;

  }

  private String message;

  public void setMessage(String message) {
    this.message = message;
  }

  public String getMessage() {
    return message;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

----------------------------------------------------------------------------------------------------------
/tutorial/create.jsp Code:
----------------------------------------------------------------------------------------------------------
<s:form action="HelloWorld">
<s:textfield name="name" label="Your name" size="50"/>
<s:select name="catID" label="Categories" list="categories"/>
<s:submit/>
</s:form>

----------------------------------------------------------------------------------------------------------
struts.xml Code:
----------------------------------------------------------------------------------------------------------
<struts>
  <constant name="struts.action.extension" value="" />
  <constant name="struts.devMode" value="true" />

  <package name="default" extends="struts-default">
    <action name="create" class="tutorial.CreateTicket">
       <result>/ticket/create.jsp</result>
    </action>
    <action name="HelloWorld" class="tutorial.HelloWorld">
       <result name="success">/ticket/createconfirm.jsp</result>
       <result name="input">/ticket/create.jsp</result>
    </action>
  </package>
</struts>

----------------------------------------------------------------------------------------------------------
HelloWorld-validaiton.xml:
----------------------------------------------------------------------------------------------------------
<validators>
  <validator type="stringlength">
    <param name="fieldName">name</param>
    <param name="minLength">10</param>
    <param name="maxLength">10</param>
    <param name="trim">true</param>
    <message>Your name needs to be 10 characters long</message>
  </validator>
</validators>
©2008 gg3721.com - Jax Systems, LLC, U.S.A.