JSF 2.0 Erforderliche Feldbeschriftung für Eigenschaften mit @NotNull-Einschränkung

8

Ich habe eine JSF 2.0-Anwendung , die auch Primefaces 3.3 verwendet. Derzeit gibt es eine nette Funktion, bei der ein Label mit einem Sternchen versehen wird, wenn das verwandte <p:inputText> ein required="true" -Attribut verwendet.

Dieses Feld ist an eine Bean-Eigenschaft gebunden, die mit @NotNull validation constraint versehen ist. Es scheint überflüssig und fehleranfällig zu sein, auch required="true" in XHTML hinzuzufügen, wenn die Bean-Eigenschaft bereits mit @NotNull versehen ist.

Gibt es einen Haken oder eine Möglichkeit, Etiketten für Komponenten automatisch zu dekorieren, die mit @NotNull an Eigenschaften gebunden sind?

Irgendwelche Gedanken oder Vorschläge werden sehr geschätzt.

    
user2055510 08.02.2013, 19:44
quelle

2 Antworten

3

Hinweis: Dies ist ein Hack. Es kann Auswirkungen auf die Leistung aufgrund der Verwendung von Introspektion haben

  1. Auf einer grundlegenden Ebene, was Sie wissen müssen, wenn das Feld mit @NotNull annotiert ist. Führen Sie diese Überprüfung an einem sinnvollen Ort wie @PostConstruct für eine View-Scoped-Bean durch. Deklarieren Sie eine globale Variable, um das erforderliche Attribut zu bestimmen

    %Vor%
  2. Binden Sie das Attribut required an die Variable in der Backing-Bean

    %Vor%
kolossus 08.02.2013 21:26
quelle
3

Diese Lösung basiert auf PF 6.0, ich erinnere mich nicht, ob BeanValidationMetadataExtractor in früheren Versionen verfügbar war. Wie auch immer, die Erstellung eines DIY-Extraktors ist eine einfache Aufgabe.

Ich hatte ein ähnliches Problem. In meinem speziellen Fall:

  • Der Benutzer sollte darüber informiert werden, dass ein bestimmtes Feld (lies UIInput ) benötigt wird
  • Ich möchte required="true" auf der Komposition nicht wiederholen, da sie bereits an eine @NotNull / @NotBlank Eigenschaft / Feld
  • gebunden ist
  • In meinem Fall ist eine Label-Komponente möglicherweise nicht vorhanden (und ich mag keine Sternetiketten)

Also, hier ist was ich getan habe:

%Vor%

und deklarieren Sie es in faces-config.xml:

%Vor%

Mit diesem Listener wird UIInput s mit einem data-required Passthrough-Attribut gerendert:

%Vor%

Jetzt verwende ich eine CSS-Regel, um diese Felder hervorzuheben:

%Vor%

Sie können diesen Listener anpassen, um die Komponente nach Bedarf zu setzen oder einen anderen Ansatz zu verwenden, der Ihren speziellen Anforderungen entspricht.

Ein anderer Ansatz könnte sein:

  • auf UILabel s anstelle von UIInput s
  • warten
  • Erhalte das UIInput mit dem for / forValue ValueExpression des Labels
  • Überprüfen Sie die UIInput für die Validierungsbeschränkung
  • ruft schließlich UIInput.setRequired(true) auf

Der Leistungseinfluss ist vernachlässigbar, da ich komplexe Seiten mit ~ 3000 Komponenten getestet habe.

    
Michele Mariotti 27.05.2017 10:01
quelle

Tags und Links