ComboBox no Struts 1.x

5 respostas
Gianetti

Galera estou com uma dúvida nas propriedades do

<html:select name="helloWorldForm"
		property="lista" styleClass="combo">
		<html:option value="0">--SELECIONAR--</html:option>
		<html:options collection="helloWorldForm" property="listaCombo"/>
	</html:select>

Não consigo carregar uma lista que se encontra no meu FormBean, o TomCat gera este log abaixo, olhei a documentação da apache [url]http://struts.apache.org/1.x/struts-taglib/tlddoc/html/options.html[/url] mas não entendi muita coisa, se alguem puder me explicar os parametros da tag options eu agradeço.

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

javax.servlet.ServletException: org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: Cannot create iterator for com.teste.form.HelloWorldForm@cfe049
	org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:286)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


root cause 

org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: Cannot create iterator for com.teste.form.HelloWorldForm@cfe049
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:538)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:412)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.apache.struts.chain.commands.servlet.PerformForward.handleAsForward(PerformForward.java:113)
	org.apache.struts.chain.commands.servlet.PerformForward.perform(PerformForward.java:96)
	org.apache.struts.chain.commands.AbstractPerformForward.execute(AbstractPerformForward.java:54)
	org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
	org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305)
	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
	org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


root cause 

javax.servlet.ServletException: javax.servlet.jsp.JspException: Cannot create iterator for com.teste.form.HelloWorldForm@cfe049
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:865)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:794)
	org.apache.jsp.helloWorld_jsp._jspService(helloWorld_jsp.java:99)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.apache.struts.chain.commands.servlet.PerformForward.handleAsForward(PerformForward.java:113)
	org.apache.struts.chain.commands.servlet.PerformForward.perform(PerformForward.java:96)
	org.apache.struts.chain.commands.AbstractPerformForward.execute(AbstractPerformForward.java:54)
	org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
	org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305)
	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
	org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


root cause 

javax.servlet.jsp.JspException: Cannot create iterator for com.teste.form.HelloWorldForm@cfe049
	org.apache.struts.taglib.html.OptionsTag.getIterator(OptionsTag.java:419)
	org.apache.struts.taglib.html.OptionsTag.doEndTag(OptionsTag.java:188)
	org.apache.jsp.helloWorld_jsp._jspx_meth_html_005foptions_005f0(helloWorld_jsp.java:224)
	org.apache.jsp.helloWorld_jsp._jspx_meth_html_005fselect_005f0(helloWorld_jsp.java:155)
	org.apache.jsp.helloWorld_jsp._jspService(helloWorld_jsp.java:86)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.apache.struts.chain.commands.servlet.PerformForward.handleAsForward(PerformForward.java:113)
	org.apache.struts.chain.commands.servlet.PerformForward.perform(PerformForward.java:96)
	org.apache.struts.chain.commands.AbstractPerformForward.execute(AbstractPerformForward.java:54)
	org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
	org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305)
	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
	org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


note The full stack trace of the root cause is available in the Apache Tomcat/6.0.35 logs.

5 Respostas

drsmachado

Isso, por que, a collection deve ser a lista que é a propriedade do FormBean

<html:select name="helloWorldForm"  
            property="lista" styleClass="combo">  
            <html:option value="0">--SELECIONAR--</html:option>  
            <html:options collection="listaCombo"/>  
        </html:select>
Gianetti

Continua dando exception

javax.servlet.ServletException: org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: Cannot find bean under name lista
	org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:286)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

O meu FormBean esta desta forma,

/**
 * 
 */
package com.teste.form;

import org.apache.struts.action.ActionForm;

/**
 * @since 13/06/2012 14:34:58
 * @modified 13/06/2012 14:34:58
 */
public class HelloWorldForm extends ActionForm {
	private static final long serialVersionUID = -473562596852452021L;
	private String message;
	private String[] lista;

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}
	
	public String[] getLista(){
		return lista;
	}
	
	public void setLista(String[] lista){
		this.lista = lista;
	}
}

obrigado!

drsmachado

O select será para múltipla seleção? Senão, o atributo lista deve ser apenas uma String e não um array.
Segundo, na resposta anterior, esqueci de retirar o atributo name da tag html:select ele é desnecessário no contexto.

Gianetti

Então, eu quero carregar uma combo de multipla seleção apartir de um array. abaixo segue o meu action e o struts-config.xml, tentei de diversas formas mas não estou conseguindo carregar uma simples combo com uma lista, obrigado mais uma vez pela ajuda.

/**
 * 
 */
package com.teste.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.teste.form.HelloWorldForm;

/**
 * 
 * @since 13/06/2012 14:36:57
 * @modified 13/06/2012 14:36:57
 */
public class HelloWorldAction extends Action {
	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		HelloWorldForm hwForm = (HelloWorldForm) form;

		hwForm.setMessage("Hello World");
		
		String[] listaCombo = {"Solicitar", "Cancelar", "Lista de Trabalho", "Relatórios"};
		hwForm.setLista(listaCombo);	

		return mapping.findForward("success");

	}
}

Meu struts-config.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
          "http://struts.apache.org/dtds/struts-config_1_3.dtd">

<struts-config>

    <form-beans>
    	<form-bean name="helloWorldForm" type="com.teste.form.HelloWorldForm"/>
    </form-beans>

	<global-forwards>
        <forward name="helloWorld" path="/helloWorld.do"/>
    </global-forwards>
    
    <action-mappings>
        <action path="/helloWorld" type="com.teste.action.HelloWorldAction" name="helloWorldForm">
        	<forward name="success" path="/helloWorld.jsp" />
        </action>    
    </action-mappings>

</struts-config>
drsmachado

Talvez isto ajude

Criado 13 de junho de 2012
Ultima resposta 14 de jun. de 2012
Respostas 5
Participantes 2