Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[JSF myfaces] message als validationerror

Pagina: 1
Acties:

  • bat266
  • Registratie: Februari 2004
  • Laatst online: 11-11 07:41
Op het moment ben ik bezig om op een formulier een errormessage weer te geven bij validationerrors.

Het form dat ik nu heb laat de message al zien achter het veld dat gevalideerd moet worden. Omdat de formulieren vrij lang kunnen zijn wil de klant graag dat er bovenaan de pagina een algemene errormessage verschijnt. (Zoiets als er zijn nog errors ...).

Het form ziet er nu zo uit:
Java Server Faces:
1
2
3
4
5
6
<tr:panelGroupLayout id="hasErrorMessage" >
    <tr:group rendered="!empty FacesContext.maximumSeverity">   
        <tr:outputText value="errormessage" />
    </tr:group>
</tr:panelGroupLayout>
..... form.....


Helaas werkt dit niet. Ook het toevoegen partialTriggers lost het probleem niet op.

Hierna heb ik geprobeerd om met een PhaseListener de rendered state aan te passen, en bij het debuggen hiervan bleek dat bij een submit van het form de PhaseListener niet werd aangeroepen ook niet als ik hem wilde laten triggeren op ANY_PHASE. Als ik de pagina voor de eerste keer laad werkt de PhaseListener wel.

Ik heb het gevoel dat er gebruik wordt gemaakt van client-side validation en dat daardoor er geen phase wordt veranderd aan de serverkant.

vraag 1: klopt dit?
vraag 2: weet iemand een oplossing voor mijn probleem?

ps. ik gebruik de trinidad namespace van myfaces

Better to remain silent and be thought a fool then to speak out and remove all doubt.


  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Vraag 1: Ja, Trinidad ondersteunt client side conversie en validatie, maar dit is iets dat helemaal buiten de verantwoordelijkheid van JSF valt. Zie: http://myfaces.apache.org...ide/clientValidation.html

Vraag 2: Zonder verdere info zie ik ook niet zo snel de oplossing, maar wat me wel opvalt is dat je zelf de error handling regelt en dat is niet de bedoeling. Als je een algemene en specifieke foutboodschap wilt tonen, kun je dat gewoon opgeven in de FacesMessage en outputten met <h:messages showSummary="true" showDetail="false" /> of natuurlijk het Trinidad equivalent: http://myfaces.apache.org...i/tagdoc/tr_messages.html.

Daarna kun je achter elk veld een <h:message for="compId" /> leggen voor gedetailleerde meldingen. Bij deze tag staan de summary en detail settings standaard goed voor jouw use case. En weer de Trinidad variant: http://myfaces.apache.org...pi/tagdoc/tr_message.html

Laatste opmerking is misschien meer een rant, maar probeer Trinidad te ditchen. Je bent niet de eerste die spijt krijgt van de keuze voor Trinidad. Ook binnen Apache ligt Trinidad niet goed. Ontwikkeling ligt helemaal stil, behalve als Oracle klanten een feature willen. Initiatieven worden tegengehouden en het framework zit vol met allerlei legacy constructies. En dit is weer voor een deel de reden dat Trinidad niet goed integreert met andere libraries, zoals Ajax4jsf.

Fat Pizza's pizza, they are big and they are cheezy


  • bat266
  • Registratie: Februari 2004
  • Laatst online: 11-11 07:41
Ik weet dat we de messages niet altijd zelf moeten regelen. In dit geval was het een vraag van een klant om naast de messages naast het veld ook nog een melding bovenin de pagina te zetten:"Er zijn nog errors" omdat een fout niet direct in de browser te zien zou kunnen zijn doordat het formulier nogal lang is.

Verder is de keuze van trinidad niet de mijne. Maar zal het proberen aan te kaarten als er ergens een keer een nieuwe keuze gemaakt diet te worden.

Edit:
De klant heeft nu de keuze client-side validation uitzetten (met alle side-effects van dien) en dan de nieuwe feature implementeren of de nieuwe feature niet implementeren

[ Voor 16% gewijzigd door bat266 op 16-10-2008 12:07 ]

Better to remain silent and be thought a fool then to speak out and remove all doubt.