Mostrar ou não um label de acordo com a opção escolhida no DropDownChoice

5 respostas
W

Galera, a dúvida é a seguinte:

Eu declaro um label que no primeiro momento a visibilidade é falsa.

final Label label = new Label("mensagem", msgModel);
label.setVisible(false);
label.setOutputMarkupId(true);

Depois eu declaro um DropDownChoice (Ele possui três opções AUDI, FORD, CHEVROLET):

final DropDownChoice<String> makes = new DropDownChoice<String>("makes",
new PropertyModel<String>(this, "selectedMake"), makeChoices);

E quando eu selecionar a opção FORD, eu quero mostrar a label. Mas não basta adicionar não basta adicionar label.SetVisible(true) abaixo:

makes.add(new AjaxFormComponentUpdatingBehavior("onchange") {

@Override
protected void onUpdate(AjaxRequestTarget target) {

if (selectedMake == "FORD") {
label.SetVisible(true);
}
}
});

Alguém aí pode me ajudar?

5 Respostas

V

Por favor, não duplique tópicos. Se errou no seu tópico, edite-o.

Além disso, ao postar código, use a tag code, como descrito aqui:

W

E aí ViniGodoy,

nem tinha percebido a duplicação. Deve ter sido uma falha que deu no browser na hora de enviar a mensagem. Foi mal.

valeu aí pela dica da formatação do código.

qnt a minha dúvida, vc tem alguma ideia de como faço isso?

W

Galera, fiz o seguinte teste:

Comentei o setVisible da label:

final Label label = new Label("mensagem", msgModel); 
   //label.setVisible(boleano);
			label.setOutputMarkupId(true);

Com isso, a label aparece quando carrego a página!

A minha condição foi invertida, quando seleciono a FORD, a minha label desaparece.

@Override
	            protected void onUpdate(AjaxRequestTarget target) {
	            	
	            	target.addComponent(models);
	                if (selectedMake == "FORD") {
	                	target.addComponent(label.setVisible(false));
	                } else {
	                	target.addComponent(label.setVisible(true));
	                }
	            }
	        });

Acontece um pequeno probleminha, uma vez que seleciono FORD e minha label desaparece (até aí tudo bem), ela não volta a aparecer quando seleciono AUDI ou CADILLAC.

Alguém tem ideia pq isso tá acontecendo?

Lembro que a minha necessidade é deixar a label invisível e só mostrar quando selecionar FORD.

W

Galera, fiz o seguinte teste:

Ao invés de trabalhar com label, declarei um textField, e como default, setei ele com Enabled = false.
E a regra continua a mesma, se selecionar A ou C, o textField torna-se editável.

Segue o código:

public class HomeTeste extends BasePage {

	private String msg = "Sucesso!";

	private List<String> listaSelecao = Arrays.asList(new String[] {"A", "B", "C"});
	
	Boolean boleano = false;
	
	private String selecionado;

	public String getSelecionado() {
		return selecionado;
	}

	public void setSelecionado(String selecionado) {
		this.selecionado = selecionado;
	}

	private String solicitanteDefault = "Fulano de Tal";
	PropertyModel<String> solicitanteDefaultModel = new PropertyModel<String>(this, "solicitanteDefault");
	
	

	public HomeTeste() {

		final TextField<String> solicitante = new TextField<String>("solicitante",solicitanteDefaultModel);
		solicitante.add(new WijTextboxBehavior());
		solicitante.setEnabled(false);
		solicitante.setOutputMarkupId(true);
	
		final DropDownChoice<String> selecao = new DropDownChoice<String>("selecao", new PropertyModel<String>(this, "selecionado"), listaSelecao);

		add(selecao);
		add(solicitante);
		
		selecao.add(new AjaxFormComponentUpdatingBehavior("onchange") {
		
			@Override
			protected void onUpdate(AjaxRequestTarget target) {
				// TODO Auto-generated method stub
				if (selecionado == "B") {
					target.addComponent(solicitante.setEnabled(false));
				} else {
					target.addComponent(solicitante.setEnabled(true));
				}
			} //fim onUpdate
		}); //fim selecao.add

	}//fim HomeTeste()

}//fim HomeTeste

Ao que me parece uma vez que digo que setVisible é false, não consigo torná-lo verdadeiro. Alguém já se deparou com essa questão?

W

Depois de quebrar muito a cabeça, descobri:

.setOutputMarkupPlaceholderTag();

Ele reserva um espaço para o componente, quando este não está visível.

Criado 17 de janeiro de 2012
Ultima resposta 19 de jan. de 2012
Respostas 5
Participantes 2