selectOneMenu - selectItem JSF

3 respostas
renanreismartins

Pessoal boa tarde

possuo um h:selectOneMenu, esta tag é povoada atraves de um metodo que retorna um list de selectItem, estes itens sao ENUMs

h:selectOneMenu styleClass="edit"
							value="#{tramiteMB.statusTramite}">
							<f:selectItems value="#{utilMB.statusTramite}" />
							<f:converter converterId="statusTramiteConverter" />
						</h:selectOneMenu>
public enum StatusTramite {

	NAO_INICIADO("Não Iniciado"), INICIADO("Iniciado"), ENCERRADO("Encerrado");
	
	private String descricaoStatus;
	
	StatusTramite(String descricaoStatus) {
		this.descricaoStatus = descricaoStatus;
	}
	
	@Override
	public String toString() {
		return this.descricaoStatus;
	}

gostaria de adicionar ao h:selectOneMenu um item chamado TODOS porém este item nao está no ENUM e nem deve, alguma sugestão ?

nao posso simplismente fazer:

<f:selectItem itemLabel="Todos" itemValue="todos" />

pois a string todos nao pode ser convertida num enum… :?

abrassss

3 Respostas

M

Olá amigo!

Acredito que não terá outra forma de fazer se não colocar a opção todos na sua Enum, pois como você disse: “A string todos nao pode ser convertida num enum” :lol:

Abraços

rponte

Trate o “Todos” como uma string vazia ou nulo.

renanreismartins

pessoal desculpem a demora, consegui achar uma solucao.

coloco no na minha pagina a opcao atraves do f:selectItem

<h:selectOneMenu styleClass="edit" value="#{tramiteMB.statusTramite}">
 <f:selectItems value="#{utilMB.statusTramite}" /> 
 <f:converter converterId="statusTramiteConverter" />
 <f:selectItem itemLabel="Todos" itemValue="todos" />
</h:selectOneMenu>

no metodo que povoa a select, passo o name da enum como valor:

public List<SelectItem> getStatusTramite() {
		List<SelectItem> status = new ArrayList<SelectItem>();
		
		for (StatusTramite s : StatusTramite.values()) {
			status.add(new SelectItem(s.name(), s.toString()));
		}
		
		return status;
	}

dae no meu converter faço a comparaçao entre os names da enum, caso nao encontre o retorno eh null.

public Object getAsObject(FacesContext context, UIComponent component,
			String value) {
		for (StatusTramite status : StatusTramite.values()) {
			if (status.name().equals(value)) {
				return status;
			}
		}

		return null;
	}

abrasssssssss

Criado 7 de julho de 2009
Ultima resposta 14 de jul. de 2009
Respostas 3
Participantes 3