Eclipse - Warning de Facelet Validator em arquivo XHTML: Value is not valid

Por favor, gostaria de saber qual seria o motivo de estar ocorrendo o warning no Eclipse, que diz: Value is not valid.

Segue duas imagens que exibem os detalhes do referido warning:


Segue o código completo do arquivo XHTML, que aparece nas duas imagens acima:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:jsf="http://xmlns.jcp.org/jsf"
    lang="pt-br">

	<ui:composition template="layout.xhtml"> <!-- Tudo o que estiver fora da tag "ui:composition" é ignorado. -->
		<ui:define name="conteudo">
			<h1>Novo aluno</h1>
	
			<div id="infoMessage">
				(Aqui vai eventual mensagem de sistema confirmando sucesso ou erro)
			</div>
	
			<br />
			
			<form jsf:id="form">
				<fieldset>
					<legend>Dados pessoais</legend>
					
					<label for="nome">Nome</label><br />
					<input type="text" jsf:value="#{alunoBean.aluno.nome}" id="nome" /><br />
					
					<label for ="sexo">Sexo</label><br />
					<select jsf:value="#{alunoBean.aluno.sexo}" id="sexo" size="0">
						<f:selectItems value="#{dataBean.sexos}" />
					</select><br />
					
					<label for="rg">RG</label><br />
					<input type="text" jsf:value="#{alunoBean.aluno.rg}" id="rg" /><br />
					
					<label for="dataDeNascimento">Data de Nascimento</label><br />
					<input type="date" jsf:value="#{alunoBean.aluno.dataNascimento}" id="dataDeNascimento">
						<f:convertDateTime type="localDate" pattern="yyyy-MM-dd" />
					</input>
				</fieldset>
	
				<br />
				
				<fieldset>
					<legend>Situação</legend>
					
					<label for="situacao">Situação</label><br />
					<select jsf:value="#{alunoBean.aluno.situacao}" id="situacao" size="0">
						<f:selectItems value="#{dataBean.situacoes}"/>
					</select>
				</fieldset>
	
				<br />
				
				<fieldset>
					<legend>Endereço</legend>
					
					<label for="rua">Rua</label><br />
					<input type="text" jsf:value="#{alunoBean.aluno.endereco.rua}" id="rua" /><br />
					
					<label for="numero">Número</label><br />
					<input type="text" jsf:value="#{alunoBean.aluno.endereco.numero}" id="numero" /><br />
					
					<label for="complemento">Complemento</label><br />
					<input type="text" jsf:value="#{alunoBean.aluno.endereco.complemento}" id="complemento" /><br />
					
					<label for="cidade">Cidade</label><br />
					<input type="text" jsf:value="#{alunoBean.aluno.endereco.cidade}" id="cidade" /><br />
					
					<label for="estado">Estado</label><br />
					<select jsf:value="#{alunoBean.aluno.endereco.estado.sigla}" id="estado" size="0">
						<f:selectItems value="#{dataBean.estados}" var="e" itemLabel="#{e.nome}" itemValue="#{e.sigla}" />
					</select><br />
					
					<label for="cep">CEP</label><br />
					<input type="text" jsf:value="#{alunoBean.aluno.endereco.cep}" id="cep" />
				</fieldset>
	
				<br />
				
				<fieldset>
					<legend>Contato</legend>
					
					<label for ="email">E-mail</label><br />
					<input type="email" jsf:value="#{alunoBean.aluno.email}" id="email" /><br />
					
					<label for="telefoneCelularDDD">Telefone Celular</label><br />
					<input type="tel" jsf:value="#{alunoBean.aluno.telefone.dddCelular}" id="telefoneCelularDDD" />&#160;
					<input type="tel" jsf:value="#{alunoBean.aluno.telefone.numeroCelular}" id="telefoneCelularNumero" /><br />
					<label for="telefoneFixoDDD">Telefone Fixo</label><br />
					<input type="tel" jsf:value="#{alunoBean.aluno.telefone.dddFixo}" id="telefoneFixoDDD" />&#160;
					<input type="tel" jsf:value="#{alunoBean.aluno.telefone.numeroFixo}" id="telefoneFixoNumero" />
				</fieldset>
	
				<br />
				
				<input type="submit" value="Gravar" jsf:action="#{alunoBean.gravar}" /> <!-- Aula 5.4 - 08m00s -->
				<input type="button" value="Relatório de Acessos" />
			</form>
		</ui:define>
	</ui:composition>
</html>

Segue o código da Classe Java AlunoBean.java, que está relacionada com o referido código XHTML:

package br.com.wagner.loucademia.interfaces.web;

import java.io.Serializable;

import javax.enterprise.context.RequestScoped; //"RequestScoped" significa que este objeto só "viverá", durante o processo de requisição
import javax.inject.Named;

import br.com.wagner.loucademia.domain.aluno.Aluno;

@Named
@RequestScoped
public class AlunoBean implements Serializable {
	private static final long serialVersionUID = 1L; /* 06/07/2019 - 23H24M - ESTA LINHA FOI ADICIONADA PELO PRÓPRIO ECLIPSE, PARA QUE NÃO APARECESSE MAIS NENHUMA MENSAGEM DE ERRO DE "SERIAL VERSION UID" */

	private Aluno aluno = new Aluno();
	
	public String gravar() {
		System.out.println("ALUNO ==> " + aluno);
		return null;
	}
	
	public Aluno getAluno() {
		return aluno;
	}
	
	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}
}

Segue o código da outra classe java Aluno.java, que também está relacionada com o código do arquivo XHTML em questão:

package br.com.wagner.loucademia.domain.aluno;

import java.io.Serializable;
import java.time.LocalDate;

import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.Enumerated;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "ALUNO")
public class Aluno  implements Serializable {
	private static final long serialVersionUID = 1L; /* 26/06/2019 - 22H08M - ESTA LINHA FOI ADICIONADA PELO PRÓPRIO ECLIPSE, PARA QUE NÃO APARECESSE MAIS NENHUMA MENSAGEM DE ERRO DE "SERIAL VERSION UID" */
	
	public enum Sexo{
		Masculino, Feminino;
	}
	
	public enum Situacao{
		Ativo, Inativo, Pendente;
	}
	
	@Id
	@Column(name = "ID", nullable = false, length = 8)
	private String matricula;
	
	@Column(name = "NOME", nullable = false, length = 64)
	private String nome;
	
	@Enumerated
	@Column(name = "SEXO", nullable = false, length = 1)
    private Sexo sexo;
	
	@Column(name = "RG", nullable = false, length = 10)
	private Integer rg;
	
	@Column(name = "NASCIMENTO", nullable = false)
	private LocalDate dataNascimento;
	
    @Enumerated
    @Column(name = "SITUACAO", nullable = false, length = 1)
	private Situacao situacao;
	
	@Column(name = "EMAIL", nullable = true, length = 64)
    private String email;
	
	@Embedded
	private Endereco endereco = new Endereco();
	
	@Embedded
	private Telefone telefone = new Telefone();

	public String getMatricula() {
		return matricula;
	}

	public void setMatricula(String matricula) {
		this.matricula = matricula;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public Sexo getSexo() {
		return sexo;
	}

	public void setSexo(Sexo sexo) {
		this.sexo = sexo;
	}

	public Integer getRg() {
		return rg;
	}

	public void setRg(Integer rg) {
		this.rg = rg;
	}

	public LocalDate getDataNascimento() {
		return dataNascimento;
	}

	public void setDataNascimento(LocalDate dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

	public Situacao getSituacao() {
		return situacao;
	}

	public void setSituacao(Situacao situacao) {
		this.situacao = situacao;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public Endereco getEndereco() {
		return endereco;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	public Telefone getTelefone() {
		return telefone;
	}

	public void setTelefone(Telefone telefone) {
		this.telefone = telefone;
	}

	@Override
	public String toString() {
		return "Aluno [matricula=" + matricula + ", nome=" + nome + ", sexo=" + sexo + ", rg=" + rg
				+ ", dataNascimento=" + dataNascimento + ", situacao=" + situacao + ", email=" + email + ", endereco="
				+ endereco + ", telefone=" + telefone + "]";
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((matricula == null) ? 0 : matricula.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Aluno other = (Aluno) obj;
		if (matricula == null) {
			if (other.matricula != null)
				return false;
		} else if (!matricula.equals(other.matricula))
			return false;
		return true;
	}
}

Por favor, peço ajuda para sabe o motivo do Eclipse ficar exibindo o warning dizendo “Value is not valid” para o código da linha 37, do arquivo XHTML que eu transcrevi acima e que contém o seguinte código:

<f:convertDateTime type="localDate" pattern="yyyy-MM-dd" />

Parece que o valor que o Eclipse diz não ser válido é o termo “localDate”.

Por favor, poderiam me ajudar?

Menu window > preferences > digita “validation” > clica na opção validation
Vai aparecer uma lista enorme de opções de validação e, acima, quatro opções.
Eu deixo a opção “suspend all validators” marcada, mas é uma questão minha.
Você pode, apenas, selecionar o que quer e desmarcar o que não quer validar na listagem, especificando para “manual” ou “build” ou ambos.

1 curtida

Darlan! Tudo bem?

Obrigado pela atenção e orientação!!

Segui a sua orientação e marquei a opção “Suspend all validators” da janela “Validation” de “Prefeferences”, do Eclipse, e realmente sumiu o Warning de “Value is not valid”.

Sumiram até outros warnings que apareciam para mim até então! :astonished:

Então, esse Warning de “Value is not valid” não é nada de importante que eu tenha que corrigir?

Mais uma vez, muito obrigado pela orientação.