Fox_McCloud 17 de jul. de 2008
Vc já tentou fazer um debug?
jason_bourne 17 de jul. de 2008
Sim…o erro estoura nessa linha:
BeanUtils.copyProperties(contaPagar, ((ContaPagarForm) form).getContaPagar());
Fox_McCloud 17 de jul. de 2008
eduacsp:
Sim…o erro estoura nessa linha:
BeanUtils.copyProperties(contaPagar, ((ContaPagarForm) form).getContaPagar());
O contaPagar, que vai receber a cópia dos atributos, foi instanciado?
Outra coisa, até onde eu sei o BeanUtils.copyProperties faz uma cópia rasa, se o bean tiver outros beans dentro (ou uma Collection) alguns dados podem não ser copiados… cuidado com isso!
jason_bourne 17 de jul. de 2008
Sim …esta instanciado no ActionForm.
Eu tentei usar assim tb, mas não funcionou:
public class CadastrarContaPagaAction extends Action {
public ActionForward execute ( ActionMapping map , ActionForm form ,
HttpServletRequest req , HttpServletResponse res ) throws Exception {
ContaPagar contaPagar = (( ContaPagarForm ) form ) . getContaPagar ();
.
.
.
return map . findForward ( "ok" );
}
}
Fox_McCloud 17 de jul. de 2008
eduacsp:
Sim ..esta instanciado no ActionForm.
Eu tentei usar assim tb, mas não funcionou:
public class CadastrarContaPagaAction extends Action {
public ActionForward execute ( ActionMapping map , ActionForm form ,
HttpServletRequest req , HttpServletResponse res ) throws Exception {
ContaPagar contaPagar = (( ContaPagarForm ) form ) . getContaPagar ();
.
.
.
return map . findForward ( "ok" );
}
}
Esperimente fazer a classe ContaPagar também extender ActionForm... só pra ver o que acontece...
jason_bourne 17 de jul. de 2008
mesmo erro
Fox_McCloud 17 de jul. de 2008
eduacsp:
Sim ..esta instanciado no ActionForm.
Eu tentei usar assim tb, mas não funcionou:
public class CadastrarContaPagaAction extends Action {
public ActionForward execute ( ActionMapping map , ActionForm form ,
HttpServletRequest req , HttpServletResponse res ) throws Exception {
ContaPagar contaPagar = (( ContaPagarForm ) form ) . getContaPagar ();
.
.
.
return map . findForward ( "ok" );
}
}
Nesse caso (sem usar o BeanUtils.copyProperties), qual é o erro que acontece?
jason_bourne 17 de jul. de 2008
Fox McCloud:
eduacsp:
Sim ..esta instanciado no ActionForm.
Eu tentei usar assim tb, mas não funcionou:
public class CadastrarContaPagaAction extends Action {
public ActionForward execute ( ActionMapping map , ActionForm form ,
HttpServletRequest req , HttpServletResponse res ) throws Exception {
ContaPagar contaPagar = (( ContaPagarForm ) form ) . getContaPagar ();
.
.
.
return map . findForward ( "ok" );
}
}
Nesse caso (sem usar o BeanUtils.copyProperties), qual é o erro que acontece?
javax.servlet.ServletException: javax.servlet.ServletException: BeanUtils.populate
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:286)
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)
root cause
javax.servlet.ServletException: BeanUtils.populate
org.apache.struts.util.RequestUtils.populate(RequestUtils.java:469)
org.apache.struts.chain.commands.servlet.PopulateActionForm.populate(PopulateActionForm.java:50)
org.apache.struts.chain.commands.AbstractPopulateActionForm.execute(AbstractPopulateActionForm.java:60)
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)
root cause
java.lang.IllegalArgumentException: No bean specified
org.apache.commons.beanutils.PropertyUtilsBean.getPropertyDescriptor(PropertyUtilsBean.java:751)
org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:937)
org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:811)
org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:298)
org.apache.struts.util.RequestUtils.populate(RequestUtils.java:467)
org.apache.struts.chain.commands.servlet.PopulateActionForm.populate(PopulateActionForm.java:50)
org.apache.struts.chain.commands.AbstractPopulateActionForm.execute(AbstractPopulateActionForm.java:60)
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)
Fox_McCloud 17 de jul. de 2008
Isso não faz sentido! Se nesse caso você não usou o BeanUtils.copyProperties, como pode ter ocorrido um erro no BeanUtils.populate?
jason_bourne 17 de jul. de 2008
Acho que por detras dos panos ele usa o BeanUtils
Fox_McCloud 17 de jul. de 2008
eduacsp:
Acho que por detras dos panos ele usa o BeanUtils
Dentro do ContaPagar o fornecedor está sendo corretamente declarado e instanciado?
Na verdade eu não gosto de utilizar FormBeans desse jeito!
Eu prefiro criar um ContaPagar extends ActionForm com todos os atributos do formulário da tela, de maneira simples, sem beans dentro, e depois eu copio os atributos para o meu bean ou VO!
public class ContaPagarForm extends ActionForm {
private java . util . Date data ;
private java . lang . String descricao ;
/* Demais atributos, construtor, getters & setters... */
}
public class CadastrarContaPagaAction extends Action {
public ActionForward execute ( ActionMapping map , ActionForm form ,
HttpServletRequest req , HttpServletResponse res ) throws Exception {
ContaPagarForm form = ( ContaPagarForm ) form ;
ContaPagar vo = new ContaPagar ();
BeanUtils . copyProperties ( vo , form );
/* ... */
return map . findForward ( "ok" );
}
}
jason_bourne 17 de jul. de 2008
Vc usa uma metodologia diferente. Eu uso essa já faz há algum tempo, só que nunca tinha dado esse problema.
Fox_McCloud 17 de jul. de 2008
Bom…
Então só tendo o projeto aqui pra debugar, hehehe!
jason_bourne 17 de jul. de 2008
Alguem tem alguma outra idéia de resolver isso?
jason_bourne 17 de jul. de 2008
Consegui resolver apenas adicionando essas linhas no bean do ContaPagar:
public Fornecedor getFornecedor () {
if ( this .fornecedor == null ) {
this .fornecedor = new Fornecedor () ;
}
return fornecedor ;
}