Como forçar erro Required em <h:selectOneMenu ...>?

4 respostas
P

O combo box exibe inicialmente “—Selecione—”. A opção required tem identificado que tal valor é válido.
Como faço para que a opção required identifique que “Selecione” não é um valor válido?

No backBean tenho:

listaEmpresaHolding.add(new SelectItem(null, "---Selecione---"));
	for (EmpresaHolding listaEmpr : listEmpresaHolding) {
		listaEmpresaHolding.add(new SelectItem(listaEmpr.getNumEmpr(),
				listaEmpr.getNomeEmpr()));
	}

No xhtml tenho

<h:selectOneMenu label="#{msgs.cadSubsidiaria}" id="subsidiaria" value="#{localizacaoBean.localizacao.emprHolding.numEmpr}" required="true">
	 	 <f:selectItems value="#{extintorBean.listaEmpresaHolding}" />
	</h:selectOneMenu>

4 Respostas

E

Pois eh cara isso eh problema q o jsf tem, q no momento que estah montando a lista do combobox ele estah perdendo o valor selecionado, uma solução seria vc guardar o valor do combo selecionado na sessão e recuperar esse valor no objeto toda vez q ele passar pelo construtor.

P

Estou começando com JSF a muito pouco tempo, não entendi muito bem o que vc quis dizer com “perdendo o valor selecionado”. No momento estou apenas montando minha página, não há um valor selecionado pelo usuário ainda.
O Valor selecionado pelo usuário será armazenado em #{localizacaoBean.localizacao.emprHolding.numEmpr} sendo que “localizacaoBean” é um bean de sessão.

O problema é: quando o usuário não seleciona um campo texto ou um radio button, uma mensagem de required é exibida. E quando o usuário não seleciona a comboBox (ou seja, permanece a opção default “—Selecione—”), a opção required não percebe isso e não é emitido aviso algum.
Estou tendo que fazer a validação no backBean verificando se #{localizacaoBean.localizacao.emprHolding.numEmpr} é igual a zero e exibir mensagem à parte.

Ao criar a lista de SelectItem a ser usada pelo jsf, eu utilizei as duas formas:

new SelectItem(null, "---Selecione---");

e

new SelectItem("", "---Selecione---");

E ambas geram código html:

<option value="0" selected="selected">---Selecione---</option>

O required identifica o valor “0” selecionado e não exibe a mensagem que deveria.
Faz alguma idéia de como fazer o required identificar que “0” é um valor inválido? Imagino que estou ignorando algum detalhe…

L

Tenta assim mano:

<h:selectOneMenu label="#{msgs.cadSubsidiaria}" id="subsidiaria" value="#{localizacaoBean.localizacao.emprHolding.numEmpr}" required="true"> <f:selectItem value="---Selecione----" /> <f:selectItems value="#{extintorBean.listaEmpresaHolding}" /> </h:selectOneMenu>

P

Valeu a força galera! Descobri o problema. (Dá até vergonha, hehehe!)
Eu estava manipulando o bean errado.
Estava manipulando e alterando o código do localizacaoBean quando o select dos itens estava no extintorBean.

Quando utilizei no lugar correto:

new SelectItem("", "---Selecione---");

ele gerou o html

<option value="" selected="selected">---Selecione---</option>

O conteúdo “” é pego pelo required=“true” e a mensa exibe a mensagem corretamente.
Obrigado pela força!!!

Criado 3 de março de 2009
Ultima resposta 3 de mar. de 2009
Respostas 4
Participantes 3