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;
}
}