Comment valider les champs numériques avec validateRegex dans une page JSF?
Dans un managed bean, j'ai une propriété de type int.
@ManagedBean
@SessionScoped
public class Nacharbeit implements Serializable {
private int number;
Dans le programme JSF page j'essaie de valider cette propriété de 6 chiffres d'entrée numérique uniquement
<h:inputText id="number"
label="Auftragsnummer"
value="#{myController.nacharbeit.number}"
required="true">
<f:validateRegex pattern="(^[1-9]{6}$)" />
</h:inputText>
De l'exécution j'obtiens une exception:
javax.servlet.ServletException: java.lang.Integer cannot be cast to java.lang.String
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
Est la regex mal? Ou sont les ValidateRegex uniquement pour les Chaînes?
source d'informationauteur Twistleton
Vous devez vous connecter pour publier un commentaire.
La
<f:validateRegex>
est destiné à être utilisé surString
propriétés. Mais vous avez là unint
biens pour lesquels la JSF serait déjà convertir le soumisString
de la valeur àInteger
avant validation. C'est ce qui explique l'exception que vous voyez.Mais comme vous êtes déjà en utilisant un
int
de la propriété, vous obtenez déjà une erreur de conversion lorsque vous entrez des chiffres. Le message d'erreur de conversion est par la voie configureable parconverterMessage
attribut. Si vous n'avez pas besoin d'utiliser les regex.Comme pour le béton à l'exigence fonctionnelle, vous semblez vouloir valider le min/max longueur. Pour cela, vous devriez être en utilisant
<f:validateLength>
à la place. Utiliser ceci en combinaison avec lemaxlength
attribut de sorte que l'utilisateur final ne sera pas en mesure de saisir plus de 6 caractères de toute façon.Vous pouvez configurer le message d'erreur de validation par le
validatorMessage
par la voie. Donc, tout, tout ce qu'il pourrait ressembler à ceci: