Ajuda "Erro de validação: o valor não é válido"

1 resposta Resolvido
jsfjavajavaweb
A

Boa tarde, estou com um problema estranho e não consigo resolver. Ao salvar uma classe com relacionamentos no banco de dados recebo o erro “Responsável:Erro de validação: o valor não é válido” mas apenas com relação à propriedade “Responsavel” que corresponde à classe “Funcionário” os outros campos incluindo “VTR” que também é um relacionamento não dão esse erro. Alguém saberia dizer onde estou errando? Acredito que seja simples mas estou há vários dias nisso e não estou conseguindo ver o erro. Abraço

<h:form id="frm">
		<p:messages showDetail="false" showSummary="true" autoUpdate="true" />
		<p:panelGrid columns="2">

			<p:outputLabel value="Data:" for="data" />
			<p:inputMask id="data" mask="99/99/9999"
				value="#{cadastroManutencaoBean.manutencao.data}"
				style="width:8em;">
				<f:convertDateTime pattern="dd/MM/yyyy" type="date"
					dateStyle="short" timeZone="GMT-3" />
			</p:inputMask>

			<p:outputLabel value="hora:" for="hora" />
			<p:inputMask id="hora" mask="99:99"
				value="#{cadastroManutencaoBean.manutencao.hora}"
				style="width:8em;">
				<f:convertDateTime pattern="HH:mm" />
			</p:inputMask>

			<p:outputLabel value="VTR" for="vtr" />
			<p:selectOneMenu value="#{cadastroManutencaoBean.manutencao.vtr}"
				id="vtr">
				<f:selectItems value="#{cadastroManutencaoBean.listaVtrs}"
					var="vtr" itemValue="#{vtr}" itemLabel="#{vtr.prefixo}" />
			</p:selectOneMenu>

			<h:outputLabel value="KM" />
			<p:inputText size="30"
				value="#{cadastroManutencaoBean.manutencao.km}" label="KM">
			</p:inputText>

			<h:outputLabel value="Manutencao" for="manutencao" />
			<p:panelGrid>
				<p:inputTextarea id="manutencao" rows="2" cols="30" maxlength="500"
					counter="dpManutencao" counterTemplate="{0} Caracteres Restantes"
					value="#{cadastroManutencaoBean.manutencao.empenho}"
					autoResize="false" />
				<br />
				<h:outputText id="dpManutencao" />
			</p:panelGrid>
			<h:outputLabel value="Local" />

			<p:panelGrid>
				<p:inputTextarea rows="1" cols="30" maxlength="500"
					counter="dpLocal" counterTemplate="{0} Caracteres Restantes"
					value="#{cadastroManutencaoBean.manutencao.local}"
					autoResize="false" />
				<br />
				<h:outputText id="dpLocal" />
			</p:panelGrid>

			<p:outputLabel value="Responsável" for="responsavel" />
			<p:selectOneMenu
				value="#{cadastroManutencaoBean.manutencao.responsavel}"
				id="responsavel">
				<f:selectItems value="#{cadastroManutencaoBean.listFuncionarios}"
					var="responsavel" itemValue="#{responsavel}"
					itemLabel="#{responsavel.nome}" />
			</p:selectOneMenu>

			<p:outputLabel value="Situacao" for="situacao" />
			<p:selectOneMenu
				value="#{cadastroManutencaoBean.manutencao.situacao}" id="situacao">
				<f:selectItems value="#{cadastroManutencaoBean.todasSituacoes}"
					var="situacao" itemValue="#{situacao}"
					itemLabel="#{situacao.nome}" />
			</p:selectOneMenu>



			<p:commandButton value="Salvar"
				action="#{cadastroManutencaoBean.salvar}" icon="ui-icon-disk"
				update="@form" />

		</p:panelGrid>
	</h:form>

Bean

`public void prepararCadastro() {
	this.todasSituacoes = this.situacoes.todos();
	this.listFuncionarios = this.funcionarios.ativos();
	this.listaVtrs = this.vtrs.ativas();

	if (this.manutencao == null) {
		this.manutencao = new Manutencao();
	}
}

public String salvar() {
	FacesContext context = FacesContext.getCurrentInstance();

	try {
		this.cadastro.salvar(this.manutencao);
		this.manutencao = new Manutencao();
		context.addMessage(null, new FacesMessage("Manutenção salva com sucesso!"));
	} catch (NegocioException e) {
		FacesMessage mensagem = new FacesMessage(e.getMessage());
		mensagem.setSeverity(FacesMessage.SEVERITY_ERROR);
		context.addMessage(null, mensagem);
	}
	return "/ConsultaManutencoes?faces-redirect=true";
}`

Funcionario

@Entity
@Table(name = "funcionario")
public class Funcionario implements Serializable {
private static final long serialVersionUID = 1L;

private Profissao profissao;
private FuncionarioSituacao funcionarioSituacao;
private NivelAutoridade nivelAutoridade;
private UsuarioLogin usuarioLogin;
private int id;
private String nome;
private String funcao;
private String nomeGuerra;
private String cpf;
private String email;
private Instituicao instituicao = new Instituicao();

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "gerFuncionario")
@SequenceGenerator(name = "gerFuncionario", sequenceName = "funcionario_seq", initialValue = 1, allocationSize = 1)
public int getId() {
	return id;
}

public void setId(int id) {
	this.id = id;
}

@NotNull
@ManyToOne(optional = false)
@JoinColumn(name = "profissao_id", referencedColumnName = "id")
public Profissao getProfissao() {
	return profissao;
}

@NotNull
@ManyToOne(optional = false)
@JoinColumn(name = "FuncionarioSituacao_id", referencedColumnName = "id")
public FuncionarioSituacao getFuncionarioSituacao() {
	return funcionarioSituacao;
}

// @NotNull
@ManyToOne // (optional = false)
@JoinColumn(name = "NivelAutoridade_id", referencedColumnName = "id")
public NivelAutoridade getNivelAutoridade() {
	return nivelAutoridade;
}

@OneToOne(cascade = CascadeType.ALL, optional = true)
@JoinColumn(name = "UsuarioLogin_id", referencedColumnName = "id")
public UsuarioLogin getUsuarioLogin() {
	return usuarioLogin;
}

@ManyToOne(cascade = CascadeType.ALL, optional = true)
@JoinColumn(name = "Instituicao_id", referencedColumnName = "id")
public Instituicao getInstituicao() {
	return instituicao;
}

public String getNome() {
	return nome;
}
//setters, hashCode e equals

Manutencao

@Entity
@Table(name = "manutencao")
public class Manutencao implements Serializable {
private static final long serialVersionUID = 1L;

private Long id;
private Situacao situacao;
private Date dataCadastro;
private Date data;
private Date hora;
private String km;
private String empenho;
private String local;
private Funcionario responsavel;
private Vtr vtr;

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "gerManutencao")
@SequenceGenerator(name = "gerManutencao", sequenceName = "manutencao_seq", initialValue = 1, allocationSize = 1)
public Long getId() {
	return id;
}

@NotNull
@ManyToOne(optional = false)
@JoinColumn(name = "situacao_id", referencedColumnName = "id")
public Situacao getSituacao() {
	return situacao;
}

@Temporal(TemporalType.DATE)
@Column(name = "data", nullable = false)
public Date getData() {
	return data;
}

@NotNull
@Temporal(TemporalType.TIME)
public Date getHora() {
	return hora;
}

@NotNull
@Size(max = 80)
@Column(length = 80, nullable = false)
public String getEmpenho() {
	return empenho;
}

@NotNull
@Size(max = 80)
@Column(length = 80, nullable = false)
public String getLocal() {
	return local;
}

public String getKm() {
	return km;
}

public Date getDataCadastro() {
	return dataCadastro;
}

@NotNull
@ManyToOne(optional = false)
@JoinColumn(name = "funcionario_id", referencedColumnName = "id")
public Funcionario getResponsavel() {
	return responsavel;
}

@NotNull
@ManyToOne(optional = false)
@JoinColumn(name = "vtr_id", referencedColumnName = "id")
public Vtr getVtr() {
	return vtr;
}
//setters, hashCode e equals

1 Resposta

A
Solucao aceita

Alterei o Converter conforme orientado no seguinte link e deu certo:

http://showcase.omnifaces.org/converters/SelectItemsConverter

Att.

Criado 12 de abril de 2020
Ultima resposta 13 de abr. de 2020
Respostas 1
Participantes 1