Problema com JSF - Cadastrar

Olá a todos,

Tenho o seguinte problema:

ADVERTÊNCIA: /cadastrar_categoria.xhtml @61,53 value="#{cadastroCategoriaBean.categoria.descricao}": Target Unreachable, identifier [cadastroCategoriaBean] resolved to null
javax.el.PropertyNotFoundException: /cadastrar_categoria.xhtml @61,53 value="#{cadastroCategoriaBean.categoria.descricao}": Target Unreachable, identifier [cadastroCategoriaBean] resolved to null

meu cadastrar_categoria.xhtml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html">

<h:head>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet"
	href="resources/bootstrap/3.3.7/css/bootstrap.min.css" />
<script src="resources/bootstrap/3.3.7/js/jquery-3.3.1.min.js"></script>
<script src="resources/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<title>Cadastro de Categorias</title>

</h:head>

<h:body>
<nav class="navbar navbar-inverse">
<div class="container-fluid">
	<div class="navbar-header">
		<button type="button" class="navbar-toggle" data-toggle="collapse"
			data-target="#myNavbar">
			<span class="icon-bar"></span> <span class="icon-bar"></span> <span
				class="icon-bar"></span>
		</button>
		<a class="navbar-brand" href="cadastrar_usuario.xhtml">Cadastro</a>
	</div>
	<div class="collapse navbar-collapse" id="myNavbar">
		<ul class="nav navbar-nav">
			<li class="active"><a href="index.xhtml">Home</a></li>
			<li><a href="cadastrar_usuario.xhtml">Cadastro de Usuário</a></li>
			<li><a href="cadastrar_categoria.xhtml">Cadastro de
					Categoria</a></li>
		</ul>
		<ul class="nav navbar-nav navbar-right">
			<li><a href="cadastrar_usuario.xhtml"><span
					class="glyphicon glyphicon-user"></span> Cadastrar-se</a></li>
			<li><a href="login.xhtml"><span
					class="glyphicon glyphicon-log-in"></span> Login</a></li>
		</ul>
	</div>
</div>
</nav>


<center><h2><h:outputText value="Categoria"/></h2></center>

<div class="container">
	<div class="row">
		<h3 class="marginLeft12">Novo Cadastro</h3>

		<br />

		<div class="col-xs-12 col-xs-updated">
			<h:form id="usuarioCadastroForm" styleClass="form-horizontal">
				<div class="form-group">
					<h:outputLabel for="descricao" value="Descrição"
						styleClass="control-label col-lg-2" />
					<div class="col-lg-10">
						<h:inputText value="# 
                                                              {cadastroCategoriaBean.categoria.descricao}"
							     styleClass="form-control" required="true" />
					</div>
				</div>					
				<div class="form-group">
					<div class="col-lg-offset-2 col-lg-10">
						    <h:commandButton id="cadastrar" value="Cadastrar"
							     action="#{cadastroCategoriaBean.novo()}"
							     styleClass="btn btn-primary" />

					</div>
				</div>
			</h:form>
		</div>
	</div>
</div>
</h:body>
</html>

meu cadastroCategoriaBean.java

package controller;

import java.util.ArrayList;
import java.util.List;

import javax.enterprise.context.SessionScoped;
import javax.inject.Named;

import model.basica.Categoria;
import model.basica.RegraExcecao;
import model.fachada.Fachada;

@SuppressWarnings("cdi-not-passivation-capable")
@Named("cadastroCategoriaBean")
@SessionScoped
public class CadastroCategoriaBean {
	
private Categoria categoria = new Categoria();

private List<Categoria> categorias = new ArrayList<Categoria>();

Fachada fachada = new Fachada();

public void novo() throws RegraExcecao {

	try {

		fachada.salvarCategoria(categoria);

	} catch (RegraExcecao ex) {

		ex.printStackTrace();

	}		
}

public List<Categoria> getCategorias() {

	try {

		categorias = fachada.listarCategoria();

	} catch (RegraExcecao e) {

		e.printStackTrace();

	}

	return categorias;

}

public void alterar() throws RegraExcecao {

	try {

		fachada.alterarCategoria(categoria);

	} catch (RegraExcecao ex) {

		ex.printStackTrace();

	}
}

public void excluir() throws RegraExcecao {

	try {

		fachada.excluirCategoria(categoria);

	} catch (RegraExcecao ex) {

		ex.printStackTrace();

	}
}

public void setCategorias(List<Categoria> categoria) {
	this.categorias = categoria;
}

public Categoria getCategoria() {
	return categoria;
}

public void setCategoria(Categoria categoria) {
	this.categoria = categoria;
}	
}

Já vi algumas formas de resolver esse problema em outros tópicos, mas não resolveram o meu.
Tenho uma classe para cadastro de usuário e essa pega normalmente, tento o mesmo código que categoria mudando somente a entidade.

Alguém saberia o que fazer?

Desde já agradeço.

Sua classe categoria está nula quando executa o método?

Tente isto

<h:commandButton id="cadastrar" value="Cadastrar"
	action="#{cadastroCategoriaBean.novo}" styleClass="btn btn-primary" process="@form" update="@form"
ajax="false" />

Se nao funcionar mande as classes modelo Categoria e Fachada

A sua classe tem que implementar Serializable.

Se a sua classe fosse RequestScoped não iria precisar, mas como não é…

h:commandButton não tem os atributos process, update e nem ajax, esses atributos são do PrimeFaces, e outra, update é ajax. Não da para utilizar ajax se ele esta setado como false

1 curtida

Consegui resolver esse problema. Obrigada.

:+1: