[resolvido]problema com array de objetos

Seguinte galera…

tenho este array cujo o Objeto é um Enum e passo duas constantes para carregar uma combo em determinada situação:

public static MencaoTAF[] getMencaoSituacao50Anos() {
		MencaoTAF[] mencoes = {SEM_MENCAO, EXCELENTE};
		return mencoes;
}

o problema acontece quando eu passo somente uma constante nesse array, quando seleciono o valor na combo para carregar outra ele chama a validação nativa do selectOneMenu
“valid is not Valid” e nem chega no meu método…

public static MencaoTAF[] getMencaoSituacao50Anos() {
		MencaoTAF[] mencoes = {SEM_MENCAO};
		return mencoes;
}

meu Enum

package br.mil.eb.dgp.sirf3.negocio.enums;


/**
 * Domínio que representa a menção para uma avaliação de TAF
 * ou TAT para um militar.
 * 
 * O militar pode ser avaliado de Excelente até Insuficiente
 */
public enum MencaoTAF  {

    EXCELENTE (1, "E", "Excelente"), 
    MUITO_BOM (2, "MB", "Muito Bom"),
    BOM (3, "B", "Bom"),     	 
    REGULAR (4, "R", "Regular"),     	 
    INSUFICIENTE (5, "I", "Insuficiente"),
    SEM_MENCAO (9, "SM", "Sem Menção");
	
 	private Integer id;
	private String descricao;
	private String sigla;
	
	/**
	 * Cria um novo objeto do tipo menção, instanciado apenas
	 * pela própria classe.
	 */
	private MencaoTAF(Integer id, String sigla, String descricao) {
		this.id = id;
		this.descricao = descricao;
		this.sigla = sigla;
	}
	
	/**
	 * Retorna o código da menção
	 */
	public Integer getId() {
		return id;
	}
	
	/**
	 * Retorna a sigla da menção
	 */
	public String getSigla() {
		return sigla;
	}
	
	/**
	 * Retorna a descrição da menção
	 */
	public String getDescricao() {
		return descricao;
	}
	
	/**
	 * Retorna a menção a partir do seu respectivo código
	 */
	public static MencaoTAF valueOf(Integer id) {
		for (MencaoTAF s: MencaoTAF.values()) {
			if (s.getId() != null && s.getId().equals(id)) {
				return s;
			}
		}
		return null;
	}
	
	public static MencaoTAF[] getMencoesSituacaoAptoRecomMaiorIgual15Meses() {
		MencaoTAF[] mencoes = {REGULAR, INSUFICIENTE};
		return mencoes;
	}
	
	public static MencaoTAF[] getMencoesSituacaoNormal() {
		MencaoTAF[] mencoes = {EXCELENTE, MUITO_BOM, BOM, REGULAR, INSUFICIENTE};
		return mencoes;
	}
     
	public static MencaoTAF[] getMencoesSituacaoAntes2006() {
		MencaoTAF[] mencoes = {EXCELENTE, MUITO_BOM, BOM, REGULAR};
		return mencoes;
	}
	
	public static MencaoTAF[] getMencaoSituacao50Anos() {
		MencaoTAF[] mencoes = {SEM_MENCAO, EXCELENTE};
		return mencoes;
	}
}

Alguém já passou por este problema?
Fiz vários teste aqui e ele só apresenta esse erro quando passo um valor somente para o array…

Fala Kelvis!! É o David mlke… blza? xD

não entendi o esquema da validação que vc falou ai… tem como colocar o código do selectOneMenu e detalhar mais o erro?

Abraco

Posta o código onde você carrega sua combo…

Opa… só corrigindo o erro: “value is not valid”

E ai Daviiiii… vc por aqui amigão… num escapou de me ajudar! kkkkk

então… ai vão as duas combos… Quando eu seleciono um valor na combo de situação ele atualiza os valores da combo de menção, daí quando ele vai carregar a menção com o array que tem um valor somente ele mostrar a validação na tela msm e nem chama qualquer método…

<rich:column>			   
                <h:selectOneMenu id="cmbSituacao" value="#{militarEvento.eventoTaf.situacaoTAF}" style="width: 200px;" 
                				 disabled="#{eventoTafControle.desabilitarSituacao}">
                	<s:selectItems value="#{eventoTafControle.getSituacoesTAF(militarEvento)}" var="situacao" label="#{situacao.sigla}"/> 
                	<s:convertEntity />
                	<a4j:support event="onchange" action="#{eventoTafControle.atualizarMencoesTAF(militarEvento)}" reRender="cmbMencao,cmbSuficiencia,realizacaoDT,cmbChamada,pnlMsg"/>
                	<rich:toolTip for="situacao" followMouse="true" style="width: 150px;" direction="top-right" mode="none" value="Por favor informe a situação do TAF."/>
                </h:selectOneMenu> 
		  	</rich:column>
		  		  	
		  	<rich:column>	
				<h:selectOneMenu id="cmbMencao" disabled="#{eventoTafControle.desabilitarMencao}"
								 title="Selecione a menção" value="#{militarEvento.eventoTaf.mencao}">
					<s:selectItems value="#{eventoTafControle.getMencoesTAF(militarEvento)}" var="mencao" label="#{mencao.descricao}"/> 
				    <s:convertEnum />
				    <a4j:support event="onchange" action="#{eventoTafControle.atualizarSuficiencia(militarEvento)}" reRender="cmbSuficiencia"/>
                	<rich:toolTip for="mencao" followMouse="true" style="width: 200px;" direction="top-right" mode="none" value="Por favor informe a menção do militar."/> 
				</h:selectOneMenu>
		  	</rich:column>

Método no meu controle que alterna o valor da menção de acordo com a situação selecionada

public void fillMencoesTAF(Militar militar, Integer situacaoId, int ano) {
		
		Integer sitNum;
		EventoTaf eventoTafEditar = (EventoTaf)getEventoEditavel();
		
		if(eventoTafEditar != null){
			sitNum = eventoTafEditar.getSituacaoTAF().getId().intValue();
		}else{
			sitNum = militar.getEventoTaf().getSituacaoTAF().getId().intValue();
		}
		
		Chamada chamadaNS = Chamada.valueOf(-1); //chamada não selecionada NS
		Suficiencia suficienciaNR = Suficiencia.NAO_REALIZADO;
		MencaoTAF mencaoSM = MencaoTAF.SEM_MENCAO;
		String dtRealizacaoVazia = "";
		setDesabilitarMencao(false);
		setDesabilitarSuficiencia(false);
		setDesabilitarChamada(false);
		setDesabilitarDiaMes(false);
		
		if (situacaoId != null) {
			if (SituacaoTAF.ALTERNATIVO_APTO_RECOM_MAIOR_IGUAL_15_MESES.equals(situacaoId)) {
				/*
				 * Para a situação ALTERNATIVO_APTO_RECOM_MAIOR_IGUAL_15_MESES, a menção só poderá
				 * exibir os itens E, MB, B, R e I
				 */
				setMencoesTAF(MencaoTAF.getMencoesSituacaoAptoRecomMaiorIgual15Meses());
			}else if(SituacaoTAF.MAIOR_50_ANOS.equals(situacaoId)){
				setMencoesTAF(MencaoTAF.getMencaoSituacao50Anos());
			}else if (SituacaoTAF.TAF_ANT_2006.equals(situacaoId) && ano >= 2006) {
				/*
				 * Para a situação TAF_ANT_2006, a menção só poderá exibir os itens
				 * E, MB, B, R e I  
				 */
				setMencoesTAF(MencaoTAF.getMencoesSituacaoAntes2006());
			}else if (SituacaoTAF.NORMAL.equals(situacaoId) && ano >= 2006) {
				/*
				 * Para a situação Normal, só poderá exibir as menções
				 */
				setMencoesTAF(MencaoTAF.getMencoesSituacaoNormal());
			}else if (Arrays.in(situacaoId, SituacaoTAF.SITUACAO_SEM_MENCAO_NAO_REALIZADO)) {
				setMencoesTAF(MencaoTAF.values());
				if(eventoTafEditar != null){
					eventoTafEditar.setRealizacaoDtFormatada(dtRealizacaoVazia);
					eventoTafEditar.setChamada(chamadaNS);
					eventoTafEditar.setMencao(mencaoSM);
					eventoTafEditar.setSuficiencia(suficienciaNR);
				}else{					
					militar.getEventoTaf().setRealizacaoDtFormatada(dtRealizacaoVazia);
					militar.getEventoTaf().setChamada(chamadaNS);
					militar.getEventoTaf().setMencao(mencaoSM);
					militar.getEventoTaf().setSuficiencia(suficienciaNR);
				}
				setDesabilitarMencao(true);
				setDesabilitarSuficiencia(true);
				setDesabilitarChamada(true);
				setDesabilitarDiaMes(true);
			}else if (Arrays.in(sitNum, SituacaoTAF.SITUACAO_REPETE_ANTERIOR)) {
				/*
				 * Para as situações com código maior ou igual a 10 e menor ou igual
				 * a 12, deve repetir a avaliação do último TAF realizado. Caso não
				 * exista a menção deverá ser REGULAR e a suficiência SUFICIENTE.
				 */
				EventoTaf evento = (EventoTaf)eventoTafServico.findUltimoTAF(militar);
				if (evento != null) {
					setMencoesTAF(MencaoTAF.values());
					setSuficienciasTAF(Suficiencia.values());
					if(eventoTafEditar != null){
						eventoTafEditar.setRealizacaoDtFormatada(dtRealizacaoVazia);
						eventoTafEditar.setChamada(chamadaNS);
						eventoTafEditar.setMencao(evento.getMencao());
						eventoTafEditar.setSuficiencia(evento.getSuficiencia());
					}else{						
						militar.getEventoTaf().setRealizacaoDtFormatada(dtRealizacaoVazia);
						militar.getEventoTaf().setChamada(chamadaNS);
						militar.getEventoTaf().setMencao(evento.getMencao());
						militar.getEventoTaf().setSuficiencia(evento.getSuficiencia());
					}
					setDesabilitarMencao(true);
					setDesabilitarSuficiencia(true);
					setDesabilitarChamada(true);
					setDesabilitarDiaMes(true);
				} else {
					/*
					 * Caso não encontre um TAF realizado anterior a data atual,
					 * a menção deverá ser definida como REGULAR e a Suficiência como
					 * SUFICIENTE.
					 */
					// Colocar os valores iniciais R - S
					if(eventoTafEditar != null){						
						eventoTafEditar.setRealizacaoDtFormatada(dtRealizacaoVazia);
						eventoTafEditar.setChamada(chamadaNS);
						eventoTafEditar.setMencao(MencaoTAF.REGULAR);
						eventoTafEditar.setSuficiencia(Suficiencia.SUFICIENTE);
					}else{
						militar.getEventoTaf().setRealizacaoDtFormatada(dtRealizacaoVazia);
						militar.getEventoTaf().setChamada(chamadaNS);
						militar.getEventoTaf().setMencao(MencaoTAF.REGULAR);
						militar.getEventoTaf().setSuficiencia(Suficiencia.SUFICIENTE);
					}
					setDesabilitarMencao(true);
					setDesabilitarSuficiencia(true);
					setDesabilitarChamada(true);
					setDesabilitarDiaMes(true);
				}
			}else {
				setMencoesTAF(MencaoTAF.values());
			}
		}
	}

fiz vários testes aqui e só acontece esse erro quando chamo o array que recebe um valor somente…
Espero que tenha conseguido explicar!! rs

Help?

Encontrei o problema, estava no momento em que eu alterava uma linha do dataTable, os demais não estavam atualizando corretamente devido á um erro de lógica, porisso ele chamava a validação nativa do selectOneMenu! rs

Abraço!