Filtro Facelets [RESOLVIDO]

2 respostas
robertwgil

Olá, estou tentando fazer um filtro que detecta quando um inputText por exemplo é required=“true” e seta automaticamente uma classe css para este campo, assim consigo mostrar para o usuário que aquele campo é obrigatório.

Quando eu tento submeter o form e ocorre o erro, ele coloca a classe, porém quando entro a primeira vez na tela não funciona, ja tentei colocar before, after e em outras fases tambem mas num rola.

Aguem sabe o por que?

Segue o meu listener:

public class TestPhraseListener implements PhaseListener {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public void afterPhase(PhaseEvent event) {
		process(event.getFacesContext().getViewRoot().getChildren());
	}

	public void beforePhase(PhaseEvent event) {
		
	}
	
	private void process(List<UIComponent> comps){
		
		for (UIComponent ui : comps) {
			
			if(ui instanceof UIInput) {
				
				UIInput u = ((UIInput) ui);
				
				if( u.isRequired() ){
					
					try {
						
						Method getter = u.getClass().getMethod("getStyleClass", new Class[]{});
						Object classes = getter.invoke(u, new Object[]{});
						
						Method setter = u.getClass().getMethod("setStyleClass", new Class[]{String.class});
						setter.invoke(u, classes + " requiedField");
						
					} catch (Exception e) {
						e.printStackTrace();
					}
					
				}
				
			}
			
			if(!ui.getChildren().isEmpty()){
				process(ui.getChildren());
			}
			
		}
		
	}

	public PhaseId getPhaseId() {
		return PhaseId.RESTORE_VIEW;
	}

}

2 Respostas

robertwgil

Bom pessoal, encontrei uma melhor solução para o problema, fiz com a customização do renderer do componente.

Postei a implementação em meu blog.

Esta ai, para quem um dia precisar…

flw…

bzy

Legal!
Eu estava curioso para saber a solução deste problema.

Valeu.

Criado 19 de setembro de 2010
Ultima resposta 20 de set. de 2010
Respostas 2
Participantes 2