Ola,
Estou utilizando JSF 2.3 e o omnifaces 2.6.2. Acontece que ao utilizar o
<f:metadata>
<o:viewParam name="produto" value="#{cadastroProdutoBean.produto}"/>
<f:event listener="#{cadastroProdutoBean.init()}" type="preRenderView" />
</f:metadata>
e entro na pagina para cadastrar um novo produto, ele simplesmente seta null no produto. coloquei o seguinte parametro no web.xml
<context-param>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
</context-param>
Nesse caso gostaria de saber se alguém sabe dizer se trata-se de um bug das versoes do jsf e do omnifaces. Usando a tag do proprio jsf funciona. Mas quando comeco a selecionar os combobox que fazem requisicoes ajax, ele simplesmente chama o metodo setProduto e seta null no produto. Com o omni faces so funciona se eu passar o produto com o id na url chamando o editar. sem passar parametro na url ele esta setando como null.
O conversor do produto
@FacesConverter(forClass = Produto.class)
public class ProdutoConverter implements Converter<Produto> {
Produtos produtos;
public ProdutoConverter() {
produtos = CDIServiceLocator.getBean(Produtos.class);
}
@Override
public Produto getAsObject(FacesContext context, UIComponent component, String value) {
if (value == null || value.isEmpty()) {
return null;
} else {
return produtos.porId(new Long(value));
}
}
@Override
public String getAsString(FacesContext context, UIComponent component, Produto produto) {
if (produto == null) {
return "";
}
return produto.getId() == null ? "" : produto.getId().toString();
}
}
o bean
@Named
@ViewScoped
public class CadastroProdutoBean implements Serializable {
@Inject
private SituacoesICMS situacoesICMS;
@Inject
private SituacoesPisCofins situacoesPisCofins;
@Inject
private SituacoesIPI situacoesIPI;
@Inject
private TiposDeProduto tiposDeProduto;
@Inject
private GenerosDeProduto generosDeProduto;
@Inject
private CodigosNCM codigosNCM;
@Inject
private Secoes secoes;
@Inject
private Categorias categorias;
@Inject
private Familias familias;
@Inject
private Unidades unidades;
@Inject
private ProdutoService produtoService;
private Produto produto;
private List<CstAIcms> listaCstAIcms;
private List<CstBIcms> listaCstBIcms;
private List<CstPisCofins> listaCstPisCofins;
private List<CstIpi> listaCstIpi;
private List<GeneroProduto> listaGeneroProduto;
private List<TipoProduto> listaTipoProduto;
private List<Secao> listaSecoes;
private List<Categoria> listaCategorias;
private List<Familia> listaFamilias;
private List<Unidade> listaUnidades;
public CadastroProdutoBean() {
limpar();
}
public void init() {
if (FacesUtil.isNotPostback()) {
listaCstAIcms = situacoesICMS.daOrigem();
listaCstBIcms = situacoesICMS.daTributacao();
listaCstPisCofins = situacoesPisCofins.deSaida();
listaCstIpi = situacoesIPI.deSaida();
listaTipoProduto = tiposDeProduto.todos();
listaGeneroProduto = generosDeProduto.todos();
listaSecoes = secoes.todas();
listaUnidades = unidades.todas();
}
}
public Produto getProduto() {
return produto;
}
public void setProduto(Produto produto) {
this.produto = produto;
if (produto != null) {
carregarCategorias();
carregarFamilias();
}
}
public List<CstAIcms> getListaCstAIcms() {
return listaCstAIcms;
}
public List<CstBIcms> getListaCstBIcms() {
return listaCstBIcms;
}
public List<CstPisCofins> getListaCstPisCofins() {
return listaCstPisCofins;
}
public List<CstIpi> getListaCstIpi() {
return listaCstIpi;
}
public List<GeneroProduto> getListaGeneroProduto() {
return listaGeneroProduto;
}
public List<TipoProduto> getListaTipoProduto() {
return listaTipoProduto;
}
public List<Secao> getListaSecoes() {
return listaSecoes;
}
public List<Categoria> getListaCategorias() {
return listaCategorias;
}
public List<Familia> getListaFamilias() {
return listaFamilias;
}
public List<Unidade> getListaUnidades() {
return listaUnidades;
}
public TipoProdutoServico[] getTipoProdutoServico() {
return TipoProdutoServico.values();
}
public TipoProducao[] getTipoProducao() {
return TipoProducao.values();
}
public TipoTruncaArredonda[] getTipoTruncaArredonda() {
return TipoTruncaArredonda.values();
}
public List<Ncm> completarNCM(String descricao) {
return codigosNCM.porDescricao(descricao);
}
public void carregarCategorias() {
listaCategorias = categorias.porSecao(produto.getSecao());
}
public void carregarFamilias() {
listaFamilias = familias.porCategoria(produto.getCategoria());
}
public void salvar() {
produtoService.salvar(produto);
limpar();
FacesUtil.addInfoMessage("Produto salvo com sucesso!");
}
private void limpar() {
produto = new Produto();
}
}