Olá
Então esse erro está sendo causado por não ter inicializado a classe logradouro dentro da classe pessoa
Fica mais ou menos assim… vc faz uma sobrecarga no metodo reset do Struts
public Pessoa extends ActionForm{
//gets e sets
public void reset(ActionMapping mapping, HttpServletRequest request){
super.reset(mapping, request);
logradouro = new Logradouro();
}
}
Se não me engano é assim a assinatura deste metodo… qualquer coisa o Ctrl+Space ajuda!! rsrrsrsrs
brincadeira… mas é o reset que faltou!!
Cara, não sabe o quanto me ajudou, certissimo!!!
Como é interessante este framework!!!
Qto ao crtl+space eu tenhu usado desde o inicio, e tenhu aprendido assim, procurando na internet e testando…e agora ate comprei o livro struts em ação…rsrsrsrsrsrsrs…um dia aprendo…hehehehe
Muito obrigado!!!
[/code]
Mas não está dando por causa desse mesmo problema resolvido no tópico:
[quote]ERROR [ApplicationDispatcher.invoke():686] - Servlet.service() for servlet jsp threw exception
org.apache.commons.beanutils.NestedNullException: Null property value for 'tipoCustoReceitaTO.tipoCustoReceitaId' on bean class 'class org.apache.struts.validator.LazyValidatorForm'[/quote]
[color=BLUE]SOLUÇÃO ERRO 1 PRA QUEM UTILIZA LAZYVALIDATORFORM[/color]
Consegui !
Na pagina continuei usando da mesma maneira acima e da mesma maneira que se usa quando se tem um ActionForm: b[/b]
No Action continuei usando BeanUtils.copyProperties , assim como descrito acima.
Depois deste método todos os dados do formulario são copiados para o objeto.
Inclusive se CustoReceitaTO tiver um objeto TipoCustoReceitaTO e na pagina tiver tipoCustoReceitaTO.tipoCustoReceitaId; todos essas agregações são mantidas.
Enfim, a solução pra LazyValidatorForm é a seguinte:
/* (non-Javadoc)
* @see org.apache.struts.actions.DispatchAction#dispatchMethod(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.String)
*/
@Override
protected ActionForward dispatchMethod( ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response, String name ) throws Exception {
ActionForward dispatchActionForward = super.dispatchMethod( mapping, form, request, response, name );
LazyValidatorForm lazyForm = ( LazyValidatorForm ) form;
lazyForm.set( "tipoCustoReceitaTO", new TipoCustoReceitaTO() );
lazyForm.set( "custoTO", new CustoTO() );
return dispatchActionForward;
}
Mesmo que na página não exista nenhum campo direto para “tipoCustoReceitaTO” ( mas sim para seus atributos: tipoCustoReceitaTO.tipoCustoReceitaId )
[color=red]DESCRIÇÃO ERRO 2 PRA QUEM UTILIZA LAZYVALIDATORFORM[/color]
Minha solução acima resolveu pro erro “Invalid argument looking up property”
Agora estou tendo um outro problema que quando não é LazyValidatorForm aparentemente se resolve com a solução do reset no ActionForm. (A mesma solução pro invalid …)
Mas como estou utilizando lazyForm, gostaria muito que me ajudassem a solucionar isso:
erro na pagina:
[code]description The server encountered an internal error () that prevented it from fulfilling this request.
ERROR [StandardWrapperValve.invoke():271] - Servlet.service() for servlet action threw exception
java.lang.IllegalArgumentException: No bean specified
at org.apache.commons.beanutils.PropertyUtilsBean.getPropertyDescriptor(PropertyUtilsBean.java:874)
at org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:933)
at org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:830)
at org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:433)
at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:493)
Isto acontece na requisição de um método do Action; exceto pro load que funciona (acho que o load funciona por causa da sobrescrição que fiz do dispatchMethod; mas nao sei pq os outros metodos nenhum funciona).
Resumindo, minha pagina aparece certinha no load ; mas quando clico em salvar (action=create) ou pesquisar (action=retrieve) [color=red]não cai nem na primeira linha do debug do método create e me dá esse erro colado acima ![/color]
No meu POJO existe a verificação de null no get das propriedades (se for null instancia o objeto em questao)
E no meu Action sobrescreví o dispatchMethod assim como descrito na minha resposta anterior.
Só não dá o erro se eu comento toda esta parte referente à custoTO na pagina do ‘gerenciamento de custoReceitaTO’:
Na verdade eu nao queria ter q criar outra tag form-bean no struts-config mas não teve outro jeito.
No form-property deste novo form-bean tb nao consegui utilizar type=“org.apache.commons.beanutils.LazyDynaBean”.
Enfim, as *modificações para solução do problema são essas:
<form-beans>
<form-bean name="form" type="org.apache.struts.validator.LazyValidatorForm" />
<form-bean name="formCustoReceita" type="org.apache.struts.validator.LazyValidatorForm">
<form-property name="custoTO" type="br.com.ctbc.avalia.model.data.CustoTO" />
<!-- tentativa com lazy dyna bean sem sucesso
<form-property name="custoTO" type="org.apache.commons.beanutils.LazyDynaBean" />
-->
</form-bean>
</form-beans>
alem de outra descrita acima que sem ela acho q tb nao funciona: get verificando null e criando instancia se necessario
[color=orange]PS: depois de fazer isso pude remover a sobrescrição do metodo dispatchMethod do meu Action.[/color]