Usar o mesmo botão para inclusão e alteração

6 respostas
V

Bom dia a todos,

Estou tentando colocar o botão “gravar” da minha aplicação para fazer duas ações uma de incluir e a outra de alterar.
Estou usando o Struts, então faço um controle na minha Action para aplicar essas ações.
Poderia fazer também em javascript, mas como estou começando a trabalhar com Struts agora, queria usar o mínimo possível de javascript.
Mas o problema q esta ocorrendo é que quando faço a ação, ele nem chega na minha Action.
Esta dando o seguinte erro:

java.lang.NumberFormatException: null
	java.lang.Integer.parseInt(Unknown Source)
	java.lang.Integer.parseInt(Unknown Source)
	raa.ebt.action.CadRedeAction.executar(Unknown Source)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	java.lang.reflect.Method.invoke(Unknown Source)
	org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:269)
	org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:170)
	org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
	org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
	org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
	org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
	org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

Segue também a minha Action:

public ActionForward executar(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {
  
		  CadRedeForm redeForm = (CadRedeForm) form;
		  
		  System.out.println("Entrou no metodo Executar");
		  
		  //carregando o bean
		  CadRedeVO cadRedeVO = new CadRedeVO();
		  
		  cadRedeVO.setCodigo(Integer.parseInt(redeForm.getCodigo()));
		  cadRedeVO.setDescRede(redeForm.getDescrede());
		  //cadRedeVO.setPesqRede(redeForm.PesqRede);
		  cadRedeVO.setUf(redeForm.getUf());
		  cadRedeVO.setDescRede(redeForm.getDescrede());
		  cadRedeVO.setCidade(redeForm.getCidade());
		  cadRedeVO.setFone1(redeForm.getFone1());
		  cadRedeVO.setContato1(redeForm.getContato1());
		  cadRedeVO.setEmail1(redeForm.getEmail1());
		  cadRedeVO.setFone2(redeForm.getFone2());
		  cadRedeVO.setContato2(redeForm.getContato2());
		  cadRedeVO.setEmail2(redeForm.getEmail2());
		  cadRedeVO.setEmailAlternativo(redeForm.getEmailAlternativo());
		  cadRedeVO.setRazao(redeForm.getRazaoSocial());
		  cadRedeVO.setInscEst(redeForm.getInscrEst());
		  cadRedeVO.setEnder(redeForm.getEndereco());
		  cadRedeVO.setCnpj(redeForm.getCnpj());
		  cadRedeVO.setBanco(redeForm.getBanco());
		  cadRedeVO.setAgencia(redeForm.getAgencia());
		  cadRedeVO.setConta(redeForm.getContaCorrente());
		  cadRedeVO.setCadFor(redeForm.getCadFor());
		  cadRedeVO.setNumContrato(redeForm.getNumContrato());
		  cadRedeVO.setEnderProm(redeForm.getEnderProm());
		  cadRedeVO.setCodgr(Integer.parseInt(redeForm.getCodgr()));
		  cadRedeVO.setCodgc(Integer.parseInt(redeForm.getCodgc()));		  
		  
		  String isativo = request.getParameter("isativo");   
		  if (redeForm.isativo == null){   
			  cadRedeVO.setIsativo("0");   
		  }else{   
			  cadRedeVO.setIsativo("1");   
		  }
	  
		  //passa uma String para data
		  //cadRede.setDataStatus(new DateTime(redeForm.getDataStatus()));
		  cadRedeVO.setDataStatus(redeForm.getDataStatus());
		  cadRedeVO.setObs(redeForm.getObs());
		    
		  //
		 
		  if (redeForm.getCodigo() == ""){
			  
			  CadRedeDAO redeDAO = new CadRedeDAO();
			  
			  if (redeDAO.incluirRede(cadRedeVO)){ 
				  executaListaRede(mapping, form, request, response);
				  return mapping.findForward("success");     
			  }
			  else{
				  return mapping.findForward("failure");
			  }
		  }else{
			  
			  CadRedeDAO redeDAO = new CadRedeDAO();
			  
			  if (redeDAO.alterarRede(cadRedeVO)){ 
				  executaListaRede(mapping, form, request, response);
				  return mapping.findForward("success");     
			  }
			  else{
				  return mapping.findForward("failure");
			  } 
			  
		  }  
		}

Agradeço desde já a ajuda de vcs,

Vitor

6 Respostas

L

olá, estou começando a aprender JAVA…

e cara, n sei se é o certo, mas qndo ele fosse gravar ou alterar, no caso chamar a action, eu mandava verificar no banco de dados se ja existem aqueles ids adicionados, se ja existissem mandava alterar, se nao, salvar…isso o botão nem precisaria de duas ações…até pq desse jeito n sei como é q faz…

uma vez fiz isso estudando, mas n foi utilizando struts…

espero a opiniões dos colegas ai tb pra saber como é o certo e se desse meu jeito tb funcionaria…

abraços

fabim

NumberFormatException. Erro de programador.
EDITADO: confundi com NPE

fabim

Na sua action, vc esta dando parse em varios parametros. Um deles esta vindo nulo e cagando tudo.

Tenta validar esses parametros antes de tentar parse’s

V

Luan, estou fazendo a minha lógica justamente como vc falou.
Mas como o nosso amigo Fábio colocou, um dos parse´s esta cagando o código todo.
Num é a toa que o “codigo” esta vindo “null”.
Ainda não consegui resolver, vcs teriam algum exemplo prático de código para me ajudar?

Obrigado mais uma vez,

Vitor

fabim

vc poderia usar uma expressao ternaria pros parametros que irao sofrer parse:

int codgr = redeForm.getCodgr() == null ? 0 : Integer.parseInt( redeForm.getCodgr() );

cadRedeVO.setCodgr( codgr );

V

Fabio,

Olha como estou usando a action.

CadRedeForm redeForm = (CadRedeForm) form;
	 	  CadRedeVO cadRedeVO = new CadRedeVO();
	 	  
	 	//carregando o bean
		  
			  //cadRedeVO.setCodigo(Integer.parseInt(redeForm.getCodigo()));
			  cadRedeVO.setDescRede(redeForm.getDescrede());
			  //cadRedeVO.setPesqRede(redeForm.PesqRede);
			  cadRedeVO.setUf(redeForm.getUf());
			  cadRedeVO.setDescRede(redeForm.getDescrede());
			  cadRedeVO.setCidade(redeForm.getCidade());
			  cadRedeVO.setFone1(redeForm.getFone1());
			  cadRedeVO.setContato1(redeForm.getContato1());
			  cadRedeVO.setEmail1(redeForm.getEmail1());
			  cadRedeVO.setFone2(redeForm.getFone2());
			  cadRedeVO.setContato2(redeForm.getContato2());
			  cadRedeVO.setEmail2(redeForm.getEmail2());
			  cadRedeVO.setEmailAlternativo(redeForm.getEmailAlternativo());
			  cadRedeVO.setRazao(redeForm.getRazaoSocial());
			  cadRedeVO.setInscEst(redeForm.getInscrEst());
			  cadRedeVO.setEnder(redeForm.getEndereco());
			  cadRedeVO.setCnpj(redeForm.getCnpj());
			  cadRedeVO.setBanco(redeForm.getBanco());
			  cadRedeVO.setAgencia(redeForm.getAgencia());
			  cadRedeVO.setConta(redeForm.getContaCorrente());
			  cadRedeVO.setCadFor(redeForm.getCadFor());
			  cadRedeVO.setNumContrato(redeForm.getNumContrato());
			  cadRedeVO.setEnderProm(redeForm.getEnderProm());
			  cadRedeVO.setCodgr(Integer.parseInt(redeForm.getCodgr()));
			  cadRedeVO.setCodgc(Integer.parseInt(redeForm.getCodgc()));
				  
			  String isativo = request.getParameter("isativo");   
				if (isativo == null){   
					redeForm.setIsativo("0");   
				}else{   
					redeForm.setIsativo("1");   
				}
			  //passa uma String para data
			  //cadRede.setDataStatus(new DateTime(redeForm.getDataStatus()));
			  cadRedeVO.setDataStatus(redeForm.getDataStatus());
			  cadRedeVO.setObs(redeForm.getObs());
	 	  	 	  
		  //
		 
		  if (redeForm.getCodigo() == null && redeForm.getCodigo() == ""){
			  
			  CadRedeDAO redeDAO = new CadRedeDAO();
			  
			  if (redeDAO.incluirRede(cadRedeVO)){ 
				  executaListaRede(mapping, form, request, response);
				  return mapping.findForward("success");     
			  }
			  else{
				  return mapping.findForward("failure");
			  }
		  }else{			  
			  
			  CadRedeDAO redeDAO = new CadRedeDAO();
			  
			  if (redeDAO.alterarRede(redeForm)){ 
				  executaListaRede(mapping, form, request, response);
				  redeForm.reset(mapping, request);
				  return mapping.findForward("success");     
			  }
			  else{
				  return mapping.findForward("failure");
			  }
		   }

Mas ele ainda continua vindo “null”.

Acho q esse código q postei vai ajudar a vc me ajudar mais… rs

Obrigado,

Vitor

Criado 27 de março de 2008
Ultima resposta 27 de mar. de 2008
Respostas 6
Participantes 3