Struts - Combobox/Select vazio

9 respostas
insuportavel

Bom a dia a todos.

Estou começando agora com j2EE e logo de cara me deram uma tarefa e eu me enrosquei em um ponto.

Preciso criar uma pagina para fazer o cadastro das ordens de produção aqui da empresa e acontece o seguinte:

A pagina principal deste modulo deverá conter alguns select/combos como fabrica, maquina, produtos entre outros.

O Problema é que de imediato em uma pagina mais simples onde se cadastra as maquinas que seram utilizadas eu não consigo colocar dois campos do tipo texto (input type=“text”) junto com um select.

Estou utilizando Struts e de forma nenhuma a coisa funciona, o select ele sempre volta vazio.

O curioso é que se eu chamo este select sozinho em uma outra pagina ele mostra as informações da tabela.

O meu codigo esta aqui:
AdicionaMaquinaAction.java

package br.com.black.struts.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 br.com.black.jdbc.dao.ProducaoDAO;
import br.com.black.jdbc.modelo.Maquina;
import br.com.black.struts.form.MaquinaForm;

public class AdicionaMaquinaAction extends Action{
      @Override
      public ActionForward execute(ActionMapping map, ActionForm form,
                             HttpServletRequest request, HttpServletResponse response) throws 
         Exception {
            System.out.println("Tentando incluir uma maquina...");
            
            Maquina maquina = ((MaquinaForm) form).getMaquina();
            
            new ProducaoDAO().adicionaMaquina(maquina);
         // TODO Auto-generated method stub
         return map.findForward("ok");
      }
}

MaquinaForm.java

package br.com.black.struts.form;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import br.com.black.jdbc.modelo.Maquina;

public class MaquinaForm extends ActionForm{
   
   /**
    * 
    */
   private static final long serialVersionUID = 1L;   
   
   private Maquina maquina = new Maquina();

   public Maquina getMaquina() {
      return maquina;
   }

   public void setMaquina(Maquina maquina) {
      this.maquina = maquina;
   }
   
   public boolean stringVazia (String s) {
      return  s == null || s.trim().length() ==0;      
   }
   
   @Override
   public ActionErrors validate(ActionMapping map, HttpServletRequest request) {
      // TODO Auto-generated method stub
      ActionErrors errors = new ActionErrors();
      if (stringVazia(maquina.getCd_maquina()))
         errors.add("cd_maquina",new ActionMessage("cd_maquinavazia"));
      if (stringVazia(maquina.getCd_fabrica()))
         errors.add("cd_fabrica",new ActionMessage("cd_fabricavazia"));
      if (stringVazia(maquina.getNm_maquina()))
         errors.add("nm_maquina",new ActionMessage("nm_maquinavazia"));
      
      return errors;
   }
   
   public void limpaForm (ActionMapping map, HttpServletRequest req) {
      maquina.setCd_maquina(null);
      maquina.setCd_fabrica(null);
      maquina.setNm_maquina(null);
   }   
}

ProducaoDAO

package br.com.black.jdbc.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.black.jdbc.ConnectionFactory;
import br.com.black.jdbc.modelo.Fabrica;
import br.com.black.jdbc.modelo.Funcionario;
import br.com.black.jdbc.modelo.Maquina;
import br.com.black.jdbc.modelo.OrdemDeProducao;

public class ProducaoDAO {
   private Connection connection;
   
   public ProducaoDAO(Connection con){
      this.connection = con;
   }
   
   public ProducaoDAO() throws SQLException{
      this.connection = ConnectionFactory.getConnection();
   }
      
   public void adicionaFabrica(Fabrica fabrica) throws SQLException {

      // prepared statement para insercao
      PreparedStatement stmt = this.connection
            .prepareStatement("insert into fabrica (cd_fabrica,nm_fabrica) values (?, ?)");

      // seta os valores
      stmt.setString(1, fabrica.getCd_fabrica());
      stmt.setString(2, fabrica.getNm_fabrica());
      
      // executa
      stmt.execute();
      stmt.close();
   }
   
   public void alteraFabrica(Fabrica fabrica) throws SQLException {
      PreparedStatement stmt = this.connection
            .prepareStatement("update fabrica set cd_fabrica=?" +
                                       "set nm_fabrica=?" +
                                       "where cd_fabrica=?");
      stmt.setString(1, fabrica.getCd_fabrica());
      stmt.setString(2, fabrica.getNm_fabrica());
      stmt.execute();
      stmt.close();
   }
   
   public void removeFabrica (Fabrica fabrica) throws SQLException {
      PreparedStatement stmt = this.connection
            .prepareStatement("delete from fabrica where cd_fabrica=?");
      stmt.setString(1, fabrica.getCd_fabrica());
      stmt.execute();
      stmt.close();      
   }
   
   public List<Fabrica> getListaFabrica() throws SQLException {
   
      PreparedStatement stmt =
         this.connection.prepareStatement("Select * from fabrica");
      ResultSet rs =stmt.executeQuery();
      
      List<Fabrica> listFabrica = new ArrayList<Fabrica>();
      
      while (rs.next()) {
         Fabrica fabrica = new Fabrica();
         fabrica.setCd_fabrica(rs.getString("cd_fabrica"));
         fabrica.setNm_fabrica(rs.getString("nm_fabrica"));
         
         listFabrica.add(fabrica);
      }
      
      rs.close();
      stmt.close();
      
      return listFabrica;
   }
   
   public void adicionaMaquina(Maquina maquina) throws SQLException {

      // prepared statement para insercao
      PreparedStatement stmt = this.connection
            .prepareStatement("insert into maquina (cd_maquina, cd_fabrica, nm_maquina) values (?, ?, ?)");

      // seta os valores
      stmt.setString(1, maquina.getCd_maquina());      
      stmt.setString(2, maquina.getCd_fabrica());
      stmt.setString(3, maquina.getNm_maquina());
      
      // executa
      stmt.execute();
      stmt.close();
   }
   
   public void alteraMaquina(Maquina maquina) throws SQLException {
      PreparedStatement stmt = this.connection
            .prepareStatement("update maquina set cd_maquina=?" +
                                        "cd_fabrica=?" +
                                        "nm_maquina=?");
      stmt.setString(1, maquina.getCd_maquina());
      stmt.setString(2, maquina.getCd_fabrica());
      stmt.setString(3, maquina.getNm_maquina());
      stmt.execute();
      stmt.close();
   }
   
   public void removeMaquina(Maquina maquina) throws SQLException {
      PreparedStatement stmt = this.connection
            .prepareStatement("delete from maquina where cd_maquina=?");
      stmt.setString(1, maquina.getCd_fabrica());
      stmt.execute();
      stmt.close();      
   }
   
   public List<Maquina> getListaMaquina() throws SQLException {
      
      PreparedStatement stmt =
         this.connection.prepareStatement("Select * from maquina");
      ResultSet rs =stmt.executeQuery();
      
      List<Maquina> listMaquina = new ArrayList<Maquina>();
      
      while (rs.next()) {
         Maquina maquina = new Maquina();
         maquina.setCd_maquina(rs.getString("cd_maquina"));
         maquina.setCd_fabrica(rs.getString("cd_fabrica"));
         maquina.setNm_maquina(rs.getString("nm_maquina"));
         listMaquina.add(maquina);
      }
      
      rs.close();
      stmt.close();
      
      return listMaquina;
   }
   
   public void adicionaOrdemDeProducao(OrdemDeProducao op) throws SQLException {

      // prepared statement para insercao
      PreparedStatement stmt = this.connection
            .prepareStatement("insert into ordemproducao (cd_produto, cd_fabrica, cd_maquina, cd_funcionario, dt_cadastro, " +
                                              "ie_confirmada, dt_confirmada, ie_cancelada, dt_cancelada, ds_cancelada, " +
                                              "ie_fechada, ds_observacao) " +
                                              "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
      // seta os valores
      stmt.setString(1, op.getCD_PROUTO());
      stmt.setString(2, op.getCD_FABRICA());
      stmt.setString(3, op.getCD_MAQUINA());
      stmt.setString(4, op.getCD_FUNCIONARIO());
      stmt.setString(5, op.getDT_CADASTRTO());
      stmt.setString(6, op.getIE_CONFIRMADA());
      stmt.setString(7, op.getDT_CONFIRMADA());
      stmt.setString(8, op.getIE_CANCELADA());
      stmt.setString(9, op.getDT_CANCELADA());
      stmt.setString(10, op.getDS_CANCELADA());
      stmt.setString(11, op.getIE_FECHADA());
      stmt.setString(12, op.getDS_OBSERVACAO());
      
      
      // executa
      stmt.execute();
      stmt.close();
   }
   
   public void alteraOrdemDeProducao(OrdemDeProducao op) throws SQLException {
      PreparedStatement stmt = this.connection
            .prepareStatement("update ordemproducao set cd_produto=? ," +
                                            " cd_fabrica=? ," +
                                            " cd_maquina=? ," +
                                            " cd_funcionario=? ," +
                                            " dt_cadastro=? ," +
                                            " ie_confirmada=? ," +
                                            " dt_confirmada=? ," +
                                            " ie_cancelada=? ," +
                                            " dt_cancelada=? ," +
                                            " ds_cancelada=? , " +
                                            " ie_fechada=? ," +
                                            " ds_observacao=?");
      stmt.setString(1, op.getCD_PROUTO());
      stmt.setString(2, op.getCD_FABRICA());
      stmt.setString(3, op.getCD_MAQUINA());
      stmt.setString(4, op.getCD_FUNCIONARIO());
      stmt.setString(5, op.getDT_CADASTRTO());
      stmt.setString(6, op.getIE_CONFIRMADA());
      stmt.setString(7, op.getDT_CONFIRMADA());
      stmt.setString(8, op.getIE_CANCELADA());
      stmt.setString(9, op.getDT_CANCELADA());
      stmt.setString(10, op.getDS_CANCELADA());
      stmt.setString(11, op.getIE_FECHADA());
      stmt.setString(12, op.getDS_OBSERVACAO());

      stmt.execute();
      stmt.close();
   }
   
   public void removeOrdemDeProducao(OrdemDeProducao op) throws SQLException {
      PreparedStatement stmt = this.connection
            .prepareStatement("delete from ordemproducao where cd_maquina=?");
      stmt.setLong(1, op.getCD_ORDEMPRODUCAO());
      stmt.execute();
      stmt.close();      
   }
   
   public List<OrdemDeProducao> getListaOrdemDeProducao() throws SQLException {
      
      PreparedStatement stmt =
         this.connection.prepareStatement("Select * from ordemproducao");
      ResultSet rs =stmt.executeQuery();
      
      List<OrdemDeProducao> listOrdemDeProducao = new ArrayList<OrdemDeProducao>();
      
      while (rs.next()) {
         OrdemDeProducao op = new OrdemDeProducao();
         
         op.setCD_ORDEMPRODUCAO(rs.getLong("cd_ordemdeproducao"));
         op.setCD_PROUTO(rs.getString("cd_produto"));
         op.setCD_FABRICA(rs.getString("cd_fabrica"));
         op.setCD_MAQUINA(rs.getString("cd_maquina"));
         op.setCD_FUNCIONARIO(rs.getString("cd_funcionario"));
         op.setDT_CADASTRTO(rs.getString("dt_cadastro"));
         op.setIE_CONFIRMADA(rs.getString("ie_confirmada"));
         op.setDT_CONFIRMADA(rs.getString("dt_confirmada"));
         op.setIE_CANCELADA(rs.getString("ie_cancelada"));
         op.setDT_CANCELADA(rs.getString("dt_cancelada"));
         op.setDS_CANCELADA(rs.getString("ds_cancelada"));
         op.setNR_QUANTIDADE(rs.getLong("nr_quantidade"));
         op.setDS_OBSERVACAO(rs.getString("ds_observacao"));
         
         listOrdemDeProducao.add(op);
      }
      
      rs.close();
      stmt.close();
      
      return listOrdemDeProducao;
   }   
   
   public void adicionaFuncionario(Funcionario funcionario) throws SQLException {

      // prepared statement para insercao
      PreparedStatement stmt = this.connection
            .prepareStatement("insert into funcionario (cd_funcionario, cd_fabrica, nm_completo, nm_usual) values (?, ?, ?, ?)");

      // seta os valores
      stmt.setString(1, funcionario.getCd_funcionario());      
      stmt.setString(2, funcionario.getCd_fabrica());
      stmt.setString(3, funcionario.getNm_completo());
      stmt.setString(4, funcionario.getNm_usual());
      
      // executa
      stmt.execute();
      stmt.close();
   }
   
   public void alteraFuncionario(Funcionario funcionario) throws SQLException {
      PreparedStatement stmt = this.connection
            .prepareStatement("update funcionario set cd_funcionario=?" +
                                        "cd_fabrica=?" +
                                        "nm_completo=?" +
                                        "nm_usual");
      
      stmt.setString(1, funcionario.getCd_funcionario());      
      stmt.setString(2, funcionario.getCd_fabrica());
      stmt.setString(3, funcionario.getNm_completo());
      stmt.setString(4, funcionario.getNm_usual());
      
      stmt.execute();
      stmt.close();
   }
   
   public void removeFuncionario(Funcionario funcionario) throws SQLException {
      PreparedStatement stmt = this.connection
            .prepareStatement("delete from funcionario where cd_funcionario=?");
      stmt.setString(1, funcionario.getCd_fabrica());
      stmt.execute();
      stmt.close();      
   }
   
   public List<Funcionario> getListaFuncionario() throws SQLException {
      
      PreparedStatement stmt =
         this.connection.prepareStatement("Select * from funcionario");
      ResultSet rs =stmt.executeQuery();
      
      List<Funcionario> listFuncionario = new ArrayList<Funcionario>();
      
      while (rs.next()) {
         Funcionario funcionario = new Funcionario();
         funcionario.setCd_funcionario(rs.getString("cd_funcionario"));
         funcionario.setCd_fabrica(rs.getString("cd_fabrica"));
         funcionario.setNm_completo(rs.getString("nm_completo"));
         funcionario.setNm_usual(rs.getString("nm_usual"));
      }
      
      rs.close();
      stmt.close();
      
      return listFuncionario;
   }   
}

Maquina.java

package br.com.black.jdbc.modelo;

public class Maquina {

   private String cd_maquina;
   private String cd_fabrica;
   private String nm_maquina;
   
   public String getCd_fabrica() {
      return cd_fabrica;
   }
   public void setCd_fabrica(String cd_fabrica) {
      this.cd_fabrica = cd_fabrica;
   }
   public String getCd_maquina() {
      return cd_maquina;
   }
   public void setCd_maquina(String cd_maquina) {
      this.cd_maquina = cd_maquina;
   }
   public String getNm_maquina() {
      return nm_maquina;
   }
   public void setNm_maquina(String nm_maquina) {
      this.nm_maquina = nm_maquina;
   }
}

e por fim meu struts-config

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"         
                      "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

   <form-beans>
      <form-bean name="ContatoForm" type="br.com.black.struts.form.ContatoForm"></form-bean>
      <form-bean name="LoginForm" type="br.com.black.struts.form.LoginForm"></form-bean>      
      <form-bean name="FabricaForm" type="br.com.black.struts.form.FabricaForm"></form-bean>
      <form-bean name="MaquinaForm" type="br.com.black.struts.form.MaquinaForm"></form-bean>      
      <form-bean name="FuncionarioForm" type="br.com.black.struts.form.FuncionarioForm"></form-bean>            
   </form-beans>

   <action-mappings>
         <action path="/teste" type="br.com.black.struts.action.TesteSimples">
            <forward name="exemplo" path="/exemplo.jsp"/>
         </action>   
         
         <action path="/listacontatos" type="br.com.black.struts.action.ListaContatosAction">
            <forward name="lista" path="/lista-elegante.jsp"></forward>
         </action>         

         <action path="/listafabrica" type="br.com.black.struts.action.ListaFabricasAction">
            <forward name="lista" path="/listaFabrica.jsp"></forward>
         </action>         
         
         <action path="/listamaquina" type="br.com.black.struts.action.ListaMaquinasAction">
            <forward name="lista" path="/listaMaquina.jsp"></forward>
         </action>         
                  
         <action path="/novoContato"
               input="/novo.jsp"
               name="ContatoForm" 
               type="br.com.black.struts.action.AdicionaContatoAction">
            <forward name="Ok" path="/listacontatos.do"></forward>
         </action>         
         
         <action path="/login" 
               name="LoginForm" 
               type="br.com.black.struts.action.Login">
               <forward name="erro" path="/erro.jsp"/>
               <forward name="ok" path="/ok.jsp"/>
         </action>
         
         <action path="/novaFabrica" 
               input="/novaFabrica.jsp"
               name="FabricaForm" 
               type="br.com.black.struts.action.AdicionaFabricaAction">
               <forward name="erro" path="/erro.jsp"/>
               <forward name="okFabrica" path="/listafabrica.do"/>
         </action>
                  
         <action path="/novaMaquina" 
               input="/novaMaquina.jsp"
               name="MaquinaForm" 
               type="br.com.black.struts.action.AdicionaMaquinaAction">
               <forward name="erro" path="/erro.jsp"/>               
               <forward name="okMaquina" path="/listamaquina.do"/>
         </action>

         <action path="/novoFuncionario" 
               input="/novoFuncionario.jsp"
               name="FuncionarioForm" 
               type="br.com.black.struts.action.AdicionaFuncionarioAction">
               <forward name="erro" path="/erro.jsp"/>               
               <forward name="okFuncionario" path="/listafuncionario.do"/>
         </action>
         
         <action path="/listaCategorias" 
               type="br.com.black.struts.action.ListaCategorias">
               <forward name="lista" path="/listaCategoria.jsp"/>
         </action>

         
   </action-mappings>
   
   <message-resources parameter="MessageResources"/>
   
</struts-config>

Gostaria muito de obter ajuda para resolver este problema.

Muito obrigado a todos.

9 Respostas

Pedrosa

Kd o código do JSP?

insuportavel

Desculpe-me, eu havia esquecido este codigo

novaMaquina.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"  %>

<html:html>
	<head><title>PCP - Planejamento e Controle de Producao</title></head>
	<cente>
	<html:form action="/novaMaquina" focus="cd_maquina">
	<table cellpadding=4 cellspacing=2 border=0>
		<th bgcolor="#CCDDEE" colspan=2>
			<font size=5>
				Cadastro de Maquinas
			</font>
			<br>
		</th>
	</table>
	
	</br>
	</br>
	
		Codigo..:
		<html:text property="maquina.cd_maquina"/> 
		<html:errors property = "cd_maquina"/></br>
		</br>				

		Fabrica..:
		<select name="cmbFabrica">
			<c:forEach var="maquina" items="${maquinas}">
				<option value="${maquina.cd_fabrica}"> ${maquina.cd_fabrica} </option>
			</c:forEach>
		</select>		
		</br>
		</br>
		
		Maquina:
		<html:text property="maquina.nm_maquina"/>
		<html:errors property = "nm_maquina"/></br>
		</br>		
		<html:submit>Cadastrar Maquina.</html:submit>
		
	</html:form>	
	</center>
</html:html>
Pedrosa

Essas taglibs do struts são horríveis como vc já usou jstl, troque as tag de text pela normais do html, caso tenham algum valor da sessão ou request preencha com el ${xxx}.

insuportavel

Opa fala Pedrosa.

Vamos la.

taglibs são estas

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
 <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"  %>

A primeira é a que referencia “jstl” certo.

E eu devo então trocar aqui assim:

<option value="maquina.cd_fabrica> "maquina.cd_fabrica" </option>

Isto?

Pedrosa

troque isso:

<html:text property="maquina.cd_maquina"/> 
<html:text property="maquina.nm_maquina"/>

por:

<input type="text" name="maquina.cd_maquina">
<input type="text" name="maquina.nm_maquina">

desse jeito deve funcionar junto com a combo, que está da maneira correta.

insuportavel

Opa fala Pedrosa.

Eu removi/troquei os tag e deixei a pagina sem elas somente com o html basico e a referencia do struts.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>


<html>
	<head><title>PCP - Planejamento e Controle de Producao</title></head>
	<cente>
	<form action="/novaMaquina" focus="cd_maquina">
	<table cellpadding=4 cellspacing=2 border=0>
		<th bgcolor="#CCDDEE" colspan=2>
			<font size=5>
				Cadastro de Maquinas
			</font>
			<br>
		</th>
	</table>
	
	</br>
	</br>

		

	
		Codigo..:
		<input type="text" name="maquina.cd_maquina">		
		</br>				
		</br>
		Fabrica..:
		<select name="cmbFabrica">
			<c:forEach var="maquina" items="${maquinas}">
				<option value="${maquina.cd_fabrica}"> ${maquina.cd_fabrica} </option>
			</c:forEach>
		</select>		
		</br>
		</br>

		
		Maquina:
		<input type="text" name="maquina.nm_maquina">
		</br>
		</br>				
		
	</form>	
	</center>
</html>
e continuou de forma errada.

Tem mais alguma coisa para ser vista?

Pedrosa

Qual erro está causando agora?, não está carregando sua combo? como vc esta chamando a url dessa página no browser?

E parece que vc não está passando esta lista via request na action.

boaglio

Tudo que dá pra fazer com as tags do Struts dá pra
fazer com as tags do JSTL, mas as vezes as do Struts
são mais simples.

Veja esse exemplo:

insuportavel

Opa boa noite Pedrosa, Boa noite Boaglio.

Não desisti de escrever esta pagina, apenas estou acabando as provas para voltar e continuar…

Eu fiz da forma que vc indicou Pedrosa e fique com o meu jsp desta frma:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"  %>


<html:html>
	<head><title>PCP - Planejamento e Controle de Producao</title></head>
	<cente>
	<html:form action="/novaMaquina" focus="cd_maquina">
	<table cellpadding=4 cellspacing=2 border=0>
		<th bgcolor="#CCDDEE" colspan=2>
			<font size=5>
				Cadastro de Maquinas
			</font>
			<br>
		</th>
	</table>
	
	</br>
	</br>
	

		Fabrica..:
		<select name="cmbFabrica">
			<c:forEach var="fabrica" items="${fabricas}">
				<option value="${fabrica.cd_fabrica}"> ${fabrica.cd_fabrica} </option>
			</c:forEach>
		</select>	

		Fabrica..:
		<input type="text" name="maquina.cd_maquina">
		</br>
		</br>
		
		Maquina:
		<input type="text" name="maquina.nm_maquina">
		</br>		
		<html:submit>Cadastrar Maquina.</html:submit>
		
	</html:form>	
	</center>
</html:html>

Deu na mesma a combo continua vazia! :frowning:

Eu chamo esta pagina atraves deste link: http://localhost:8080/relucStruts/novaMaquina.do

Ei Boaglio, eu vi o exemplo e anotei o link muito bacana, eu quero fazer a mesma coisa só que preciso buscar informações em uma base de dados… Tem como eu uasar o mesmo exemplo como base, la ele fazia algo do tipo

... String[]={"1","2","3","4"} ...

Eu preciso tentar algo do tipo:

Fabrica[]={bancoDeDados.nomeDasFabricas};

Muito obrigado pela ajuda de vcs!

Criado 28 de março de 2006
Ultima resposta 4 de abr. de 2006
Respostas 9
Participantes 3