Combobox Struts2

4 respostas
leohunther

Prezados,
Estou precisando criar um combobox no struts 2.
Eu fiz assim:
Minha classe action

public class ControleLogin extends ActionSupport implements SessionAware {
private List<String> cargo;

public String controla(){
cargo = new ArrayList<String>();
    		cargo.add("Vendedor");
    		cargo.add("Gerente");
    		cargo.add("Caixa");
    		return "sucess";
}

get's e set's...

JSP

<tr><td><s:combobox  id="11" name="cargo" list="cargo"  headerValue="-- Selecione o cargo --" headerKey="1" label="Cargo"></s:combobox></td></tr>
					<tr>

Alguém poderia me explicar como fazer o combo e como recuperar seu valor escolhido pelo usuário?
Valeu!

Dá o erro:

SEVERE: Servlet.service() for servlet jsp threw exception
tag 'combobox', field 'list', id '11', name 'cargo': You must specify a collection/array/map/enumeration/iterator. Example: people or people.{name} - [unknown location]
	at org.apache.struts2.components.Component.fieldError(Component.java:231)
	at org.apache.struts2.components.Component.findValue(Component.java:293)
	at org.apache.struts2.components.ComboBox.findListValue(ComboBox.java:164)
	at org.apache.struts2.components.ComboBox.evaluateExtraParams(ComboBox.java:114)
	at org.apache.struts2.components.UIBean.evaluateParams(UIBean.java:780)
	at org.apache.struts2.components.UIBean.end(UIBean.java:481)
	at org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:43)
	at org.apache.jsp.incluirFuncionario_jsp._jspx_meth_s_005fcombobox_005f0(incluirFuncionario_jsp.java:564)
	at org.apache.jsp.incluirFuncionario_jsp._jspx_meth_s_005fform_005f0(incluirFuncionario_jsp.java:258)
	at org.apache.jsp.incluirFuncionario_jsp._jspService(incluirFuncionario_jsp.java:130)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:413)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:99)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)

4 Respostas

allanmarques

Seguinte:
renomeie seu atributo List para cargos (não esqueça de alterar no JSP o list para cargos).
Crie um atributo cargo na sua action do tipo String com get e set. Esse atributo será setado com o valor selecionado no combo.
Eu uso s:select ao invés de s:combobox.

leohunther

Só tem que fazer isso?

Fiz, deu esse erro:

tag 'select', field 'list', id '11', name 'cargo': The requested list key 'cargos' 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:231)
	at org.apache.struts2.components.Component.findValue(Component.java:293)
	at org.apache.struts2.components.ListUIBean.evaluateExtraParams(ListUIBean.java:79)
	at org.apache.struts2.components.Select.evaluateExtraParams(Select.java:99)
	at org.apache.struts2.components.UIBean.evaluateParams(UIBean.java:780)
	at org.apache.struts2.components.UIBean.end(UIBean.java:481)
	at org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:43)
	at org.apache.jsp.incluirFuncionario_jsp._jspx_meth_s_005fselect_005f0(incluirFuncionario_jsp.java:564)
	at org.apache.jsp.incluirFuncionario_jsp._jspx_meth_s_005fform_005f0(incluirFuncionario_jsp.java:258)
	at org.apache.jsp.incluirFuncionario_jsp._jspService(incluirFuncionario_jsp.java:130)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:413)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:99)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)

Valeu, vou continuar tentando.

leohunther

To usando JPA, tem que colocar alguma annotation?
Não to mapeando em lugar nenhum, já que estou usando JPA.

leohunther

Bem, só consegui resolver botando o atributo em session.
Aó peguei no jsp assim:

<s:select list="#session['cargos']" id="cargo" name="cargo" headerValue="-- Selecione o cargo --" headerKey="1" label="Cargo"></s:select>

valeu!

Criado 18 de outubro de 2008
Ultima resposta 19 de out. de 2008
Respostas 4
Participantes 2