Ir para conteúdo
Fórum Script Brasil
  • 0

Erro no JSF: ? cadastro:funcionarioCargo: Erro de validação: o valor n


Diogo GM

Pergunta

Alow Galera, sou novo no Forum e tb em JSF. Estou um um problema que já quebrei muito a cabeça mas já esgotei as possibilidades aqui de resolver essa bronca. Peço a ajuda de vocês para me ajudar nesse problema, é o seguinte:

Estou carregando um combobox de funcionarioCargo baseado em outro combobox de empresa com Ajax e JSF, isso é feito para que eu possa cadastrar um funcionario onde eu escolho a empresa e os cargos relacionados a mesma, são carregados automaticamente. Até ai tudo bem. Quando eu vou enviar o formulário acontece o seguinte erro de validação:

? cadastro:funcionarioCargo: Erro de validação: o valor não é válido

Já implementei a classe Converter referente e todos os meus POJOS estão com equals e hashcode rescritos.

vou colocar os códigos para melhor representar:

funcionario.xhtml


<?xml version="1.0" encoding="UTF-8"?>
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">

<ui:composition template="/templates/interna.xhtml">

<ui:define name="titulo">
Cadastro de funcionários
</ui:define>

<ui:define name="corpo">

<h:form id="cadastro">
<h:messages/>
<h:inputHidden value="#{funcionarioBean.funcionario.codigo}"/>
<h:inputHidden value="#{funcionarioBean.destinoSalvar}"/>

<h:panelGrid columns="2">
<h:outputLabel value="Nome:" for="nome"/>
<h:inputText id="nome" label="Nome" value="#{funcionarioBean.funcionario.nome}" size="30" maxlength="30" required="true" requiredMessage="Você não tem nome?">
<f:validateLength minimum="10" maximum="30"/>
</h:inputText>

<h:outputLabel value="Data Nascimento:" for="data"/>
<h:inputText id="data" label="Data Nascimento" value="#{funcionarioBean.funcionario.nascimento}" size="10" maxlength="10" required="true">
<f:convertDateTime dateStyle="medium"/>
</h:inputText>

<h:outputLabel value="Fone:" for="fone"/>
<h:inputText id="fone" label="Fone" value="#{funcionarioBean.funcionario.fone}" size="10"/>

<h:outputLabel value="e-Mail:" for="email"/>
<h:panelGroup>
<h:inputText id="email"
label="e-Mail"
value="#{funcionarioBean.funcionario.email}"
size="50" maxlength="50" required="true"
validatorMessage="e-Mail inválido">
<f:validateRegex pattern="[a-zA-Z0-9\-\_\.]+@[a-zA-Z0-9\-\_\.]+"/>
</h:inputText>
<h:message for="email"/>
</h:panelGroup>

<h:outputLabel value="Identidade:" for="identidade"/>
<h:inputText id="identidade" label="Identidade" value="#{funcionarioBean.funcionario.identidade}" size="10"/>

<h:outputLabel value="CPF:" for="cpf"/>
<h:inputText id="cpf" label="CPF" value="#{funcionarioBean.funcionario.cpf}" size="10"/>

<h:outputLabel value="Empresa:" for="empresa"/>
<h:selectOneMenu id="empresa" value="#{funcionarioBean.funcionario.empresa}" valueChangeListener="#{funcionarioCargoBean.listarCargosPorEmpresa}">
<f:selectItem itemValue="" itemLabel="Selecione"/>
<f:selectItems value="#{empresaBean.lista}" var="empresa"
itemValue="#{empresa}"
itemLabel="#{empresa.razaoSocial}"/>
<f:ajax event="change" render="funcionarioCargo"/>
</h:selectOneMenu>

<h:outputLabel value="Cargo:" for="funcionarioCargo"/>
<h:selectOneMenu id="funcionarioCargo" value="#{funcionarioBean.funcionario.funcionarioCargo}">
<f:selectItem itemValue="" itemLabel="Selecione"/>
<f:selectItems value="#{funcionarioCargoBean.cargosPorEmpresa}" var="funcionarioCargo"
itemValue="#{funcionarioCargo}"
itemLabel="#{funcionarioCargo.descricao}"/>
</h:selectOneMenu>


</h:panelGrid>

<h:commandButton action="#{funcionarioBean.salvar}" value="Salvar"/>
</h:form>

</ui:define>
</ui:composition>
</html>
[/CODEBOX]

FuncionarioCargoBean.java

[CODEBOX]
package jotudeweb.web;

import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.event.ValueChangeEvent;
import jotudeweb.funcionario.cargo.FuncionarioCargo;
import jotudeweb.funcionario.cargo.FuncionarioCargoRN;

@ManagedBean(name="funcionarioCargoBean")
@RequestScoped
public class FuncionarioCargoBean {

private FuncionarioCargo funcionarioCargo = new FuncionarioCargo();
private List<FuncionarioCargo> lista = new ArrayList<FuncionarioCargo>();
private List<FuncionarioCargo> cargosPorEmpresa = new ArrayList<FuncionarioCargo>();
private String destinoSalvar;

public String novo() {
this.destinoSalvar = "funcionarioCargoSucesso";
this.funcionarioCargo = new FuncionarioCargo();
return "funcionarioCargo";
}

public String editar() {
return "/admin/funcionarioCargo";
}

public String salvar() {

FuncionarioCargoRN funcionarioCargoRN = new FuncionarioCargoRN();
funcionarioCargoRN.salvar(this.funcionarioCargo);
return this.destinoSalvar;
}

public String excluir() {
FuncionarioCargoRN funcionarioCargoRN = new FuncionarioCargoRN();
funcionarioCargoRN.excluir(this.funcionarioCargo);
this.lista = null;
return null;
}

public List<FuncionarioCargo> getLista() {
FuncionarioCargoRN funcionarioCargoRN = new FuncionarioCargoRN();
this.lista = funcionarioCargoRN.listar();
return this.lista;
}

public List<FuncionarioCargo> getCargosPorEmpresa(){
return this.cargosPorEmpresa;
}

public List<FuncionarioCargo> listarCargosPorEmpresa(ValueChangeEvent evento){
String empresa = evento.getNewValue().toString();
List<FuncionarioCargo> cargos = new ArrayList<FuncionarioCargo>();
FuncionarioCargoRN funcionarioCargoRN = new FuncionarioCargoRN();

cargos = funcionarioCargoRN.listar();

for(int i=0; i<cargos.size();i++){
if(cargos.get(i).getEmpresa().toString().equals(empresa)){
this.cargosPorEmpresa.add(cargos.get(i));
}
}
return this.cargosPorEmpresa;
}

public String getDestinoSalvar() {
return destinoSalvar;
}

public void setDestinoSalvar(String destinoSalvar) {
this.destinoSalvar = destinoSalvar;
}

public FuncionarioCargo getFuncionarioCargo() {
return funcionarioCargo;
}

public void setFuncionarioCargo(FuncionarioCargo funcionarioCargo) {
this.funcionarioCargo = funcionarioCargo;
}


}

FuncionarioCargoConverter.java


package jotudeweb.web.converter;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import javax.faces.convert.FacesConverter;
import jotudeweb.funcionario.cargo.FuncionarioCargo;
import jotudeweb.funcionario.cargo.FuncionarioCargoRN;

@FacesConverter(forClass = FuncionarioCargo.class)
public class FuncionarioCargoConverter implements Converter {

@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if (value != null && value.trim().length() > 0) {
Integer codigo = Integer.valueOf(value);
try {
FuncionarioCargoRN funcionarioCargoRN = new FuncionarioCargoRN();
return funcionarioCargoRN.carregar(codigo);
} catch (Exception e) {
throw new ConverterException("Não foi possível encontrar o cargo de código " + value + "." + e.getMessage());
}
}
return null;
}

@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value != null) {
FuncionarioCargo funcionarioCargo = (FuncionarioCargo) value;
return funcionarioCargo.getCodigo().toString();
}
return "";
}
}
[/CODEBOX]

Esse mesmo problema estava acontecendo quando eu ia cadastrar o funcionarioCargo com um combo de empresa. Só que ai eu não precisava carregar nada com ajax, apenas listava as empresas em um combo e enviava o form. Só que ai eu implementei a classe Converter e resolvi o problema. Mas no caso ai de cadastrar funcionario com uma empresa e um cargo referente a essa empresa carregando o combo de cargos referente a uma empresa escolhida, acontece esse erro justamente no combo do cargo e eu não consigo inserir de jeito nenhum.

Gostaria que me ajudassem se possível.

Obrigado!

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...