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.
Hinweis: Dies ist ein Hack. Es kann Auswirkungen auf die Leistung aufgrund der Verwendung von Introspektion haben
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
Binden Sie das Attribut required
an die Variable in der Backing-Bean
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:
UIInput
) benötigt wird required="true"
auf der Komposition nicht wiederholen, da sie bereits an eine @NotNull
/ @NotBlank
Eigenschaft / Feld 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:
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:
UILabel
s anstelle von UIInput
s UIInput
mit dem for
/ forValue
ValueExpression des Labels UIInput
für die Validierungsbeschränkung UIInput.setRequired(true)
auf
Der Leistungseinfluss ist vernachlässigbar, da ich komplexe Seiten mit ~ 3000 Komponenten getestet habe.
Tags und Links jsf-2 primefaces