Erro ManagedBean

Olá Pessoal,

Estou o dia todo tentando entender pq acontece isso… é estranho…

Seguinte, tenho um CRUD simples feito em primefaces, o botão gravar tem retorno void, pois ao salvar o sistema tem que set mantido na mesma tela.
Quando eu clico no botão salvar a primeira vez, o sistema se comporta muito bem, mas quando clico novamente no botão salvar o sistema dá erro na construção do Bean:

com.sun.faces.mgbean.ManagedBeanCreationException: Um erro ocorreu ao realizar a injeção de recurso no bean gerenciado usuarioBean
at com.sun.faces.mgbean.BeanBuilder.invokePostConstruct(BeanBuilder.java:229)
at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:105)
at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:405)
at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:267)
at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:86)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72)
at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:68)

Parte do meu bean:

public UsuarioBean() {  
	}

	@PostConstruct
	public void init(){
		
		HttpSession session = ( HttpSession ) FacesContext.getCurrentInstance().getExternalContext().getSession( true );
		String email = (String) session.getAttribute("emailUsuario");
		
		usuario = businessService.obterPorEmail(email);
		paises = businessService.listarPais();
		atividades = businessService.listarRamoAtividade();
		titulacoes = businessService.listarTitulacao();
		tiposUsuario = businessService.listarTipoUsuario();

		if(usuario != null){
			
			if(usuario.getCidade() != null && usuario.getCidade().getEstado() != null && usuario.getCidade().getEstado().getPais() != null) {
				paisSelecionado = usuario.getCidade().getEstado().getPais().getCodigo().toString();
			}

			estados = businessService.listarEstadoPorPais(1);
			estadoSelecionado = usuario.getCidade().getEstado().getCodigo().toString();

			cidades = businessService.listarCidadePorEstado(1);
			cidadeSelecionado = usuario.getCidade().getCodigo().toString();

			titulacaoSelecionado = usuario.getTitulacao().getCodigo().toString();

			atividadeSelecionado = new ArrayList<String>();
			for (int i = 0; i < usuario.getRamoAtividades().size(); i++) {
				atividadeSelecionado.add((usuario.getRamoAtividades().get(i).getCodigo().toString()));
			}

			tiposSelecionado = new ArrayList<String>();
			for (int i = 0; i < usuario.getTipos().size(); i++) {
				tiposSelecionado.add((usuario.getTipos().get(i).getCodigo().toString()));
			}
			
			String caminhoDestinoFoto = ( ( ServletContext ) FacesContext.getCurrentInstance().getExternalContext().getContext() ).getRealPath( "fotos_usuarios" );
			File foto;
			
			try {
				foto = new File(caminhoDestinoFoto + "/" + this.getUsuario().getCodigo() + ".jpg");
				fotoView = new DefaultStreamedContent(new FileInputStream(foto), "image/jpeg");  
			} catch (FileNotFoundException e) {
				foto = new File(caminhoDestinoFoto + "/" + "fotoUser.png");
				try {
					fotoView = new DefaultStreamedContent(new FileInputStream(foto), "image/jpeg");
				} catch (FileNotFoundException e1) {
					e1.printStackTrace();
				}
			}
			
		}
	}

	public void gravar() {

		if (this.validar()) {
	
			String caminhoDestinoFoto = "";

			if ( FacesContext.getCurrentInstance() != null ) {
				caminhoDestinoFoto = ( ( ServletContext ) FacesContext.getCurrentInstance().getExternalContext().getContext() ).getRealPath( "fotos_usuarios" );
			}

			if(foto != null) {
				caminhoDestinoFoto = caminhoDestinoFoto +  "/" + this.getUsuario().getCodigo() + ".jpg";
				FileOutputStream outputStream;
				try {
					outputStream = new FileOutputStream( caminhoDestinoFoto );
					byte byteFoto[] = IOUtils.toByteArray(foto.getInputstream());  
					outputStream.write(byteFoto);
				} catch (FileNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}


			businessService.gravarUsuario(this.getUsuario());
			
		}
	}

Parte do xhtml

<td colspan="4"><p:commandButton value="Gravar"
actionListener="#{usuarioBean.gravar}" 
ajax="false" styleClass="btAzul-1" /> 
<input
type="reset" class="btAzul-1" value="Cancelar" />
</td>

Alguem tem uma luz?

Obrigada

experimenta colocar somente action no xhtml e teste

Nada pessoal…

Alguém tem mais alguma sugestão?

Por essa linha aqui:

at com.sun.faces.mgbean.BeanBuilder.invokePostConstruct(BeanBuilder.java:229)

Parece que alguma exceção está estourando no seu método init (que é o método anotado com @PostConstruct). Não aparece nenhum “Caused by…” abaixo dessa exceção? Já tentou colocar um breakpoint no início do método e rodar em debug pra ver o que acontece lá?

Olá

Eu debuguei, é bem estranho… mas o sistema faz as mesmas coisas que faz no primeiro clique do botão gravar.

O que notei debugando, é que os objetos do hibernate (estão como lazy) mas não estão vindo populados na segunda vez.

É meio loucura, não entendi ainda o que está acontecendo!

[]s