JSF Custom Validation Messages Migration von JSF 1.2 auf 2.0

klaus1

Aktives Mitglied
Hallo,

Ich hatte in JSF 1.2 die Möglichkeit folgende Klasse zu überschreiben, um eine gezielte Meldung der JSF Validation Meldungen zu erhalten. Diese Möglichketi habe ich deshalb geschaffen, damit ich den Error Text nach einem Roundtrip direkt auf meiner Seite darstellen kann. (habe sehr verschachtelte Facelets im Einsatz).
Überschriebene Klasse:
org.ajax4jsf.component.AjaxViewRoot
Methode: processEvents:
Code:
    public void processEvents( FacesContext context, EventsQueue phaseEventsQueue, boolean havePhaseEvents ) {
        FacesEvent event;
        while ( havePhaseEvents ) {
            try {
                event = phaseEventsQueue.remove();
                UIComponent source = event.getComponent();
                try {
                    source.broadcast( event );
                }
                catch ( AbortProcessingException ex ) {
                    if ( SUPER_LOGGER.isErrorEnabled() ) {
                        UIComponent component = event.getComponent();
                        String id = null != component ? component.getClientId( context ) : "";
                        SUPER_LOGGER.error( "Error processing faces event for the component " + id, ex );
                    }
                    
                    Throwable root = CommonUtils.getRootCause( ex );
                    if ( ClientUtils.isFachException( root ) ) {
                        JsfUtils.addMessage( FacesMessage.SEVERITY_ERROR, root.getMessage() );
                        JsfUtils.getContext().renderResponse();
                    }
                    else {
                        throw ex;
                    }
                }
                // CHECKSTYLE OFF: RuntimeException
                catch ( RuntimeException ex ) {
                    // CHECKSTYLE ON: RuntimeException
                    Throwable root = CommonUtils.getRootCause( ex );
                    if ( ClientUtils.isFachException( root ) ) {
                        logMessage( root );
                        JsfUtils.getContext().renderResponse();
                    }
                    else {
                        throw ex;
                    }
                }
            }
            catch ( NoSuchElementException ex ) {
                havePhaseEvents = false;
            }
        }
    }

Jetzt suche ich genau dieselbe Stelle für JSF 2.0. Ich habe bereits mit den ExceptionHandlerFactory experimentiert, hier kommen allerdings die Fehlermeldungen nicht an.
Eventuell im Bereich PhaseListener ?
Vielleicht hat jemand eine Idee für mich?

Danke,
Klaus
 

F.S.WhiTeY

Bekanntes Mitglied
Moin,

eigenen Validator schreiben und einfach auf die normalen Faces-Messages zugreifen:

Java:
@FacesValidator("eigenerValidator")
public class eigenerValidator implements Validator{

public void validate(FacesContext context, UIComponent component, Object value)
                                                          throws ValidatorException{

         if( Was auch immer du validieren möchtest ){
              
             throw new ValidatorException(
                             new FacesMessage(FacesMessage.SEVERITY_ERROR,
                                                        "FEHLER XYZ",
                                                         "FEHLER XYZ"));


         }



}

}

[XML]

<h:message for="test" styleClass="deinStyle" />
<h:inputText id="test" validator="eigenerValidator" value="irgendeineBean.property" required="true" />

[/XML]
 

F.S.WhiTeY

Bekanntes Mitglied
Ach ja... Die Messages.propertys kannst du auch noch editieren um die Messages zu überschreiben. Desweiteren kann man sich noch ein Message Bundle erstellen um Custom Error Messages abzusetezn.
 
S

Sym

Gast
Hast Du über diesen Mechanismus versucht, in JSF 1.2 spezielle Validierungen durchzuführen. Liest sich ein wenig komisch.

Ansonsten entweder, wie F.S.WhiTeY es beschrieben hat oder JSF 303 Bean validation verwenden. Auch in diesem Fall kannst Du die Fehlermeldungen in der entsprechenden Properties überschreiben.
 

F.S.WhiTeY

Bekanntes Mitglied
...oder JSF 303 Bean validation verwenden...

Meinst du die Bean validation nach JSR 303 mit den Annotationen? Wenn ja dann ist das auch ne coole Geschichte. Da kann man die validation innerhalb des Quelltextes abharken und braucht sich in den JSF-Pages nicht mehr darum zu kümmern.
 

Ähnliche Java Themen

Neue Themen


Oben