5 votes

Composant Web des puces Primefaces

J'ai un CRUD et je veux changer l'inputTexArea :

<p:inputTextarea id="tags" value="#{myController.selected.tags}" />

Aux nouveaux Primefaces puces composant :

<p:chips id="tags" value="#{myController.selected.tags}" />

Un extrait de classe d'entité :

@Lob
@Size(max = 2147483647)
@Column(name = "tags")
private String tags;
//GETTER AND SETTER OMITTED

Le site obtenir fonctionne bien, car les balises s'affichent dans le champ comme prévu :

public List<String> getTags() {
return Arrays.asList(tags.split(","));
}

Mais le set ne l'est pas, car lorsque je clique sur Enregistrer, une exception se produit :

public void setTags(List<String> tags) {
this.tags = String.join(",", tags);
}

java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.CharSequence
at org.hibernate.validator.internal.constraintvalidators.SizeValidatorForCharSequence.isValid(SizeValidatorForCharSequence.java:33)
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateSingleConstraint(ConstraintTree.java:281)

Quelqu'un peut-il m'aider, s'il vous plaît ?

Merci d'avance.

ps. : J'ai déjà demandé cela à l'équipe Primefaces ( https://forum.primefaces.org/viewtopic.php?f=3&t=51091 ), et un développeur principal de Primefaces (Thomas Andraschko) m'a orienté vers l'équipe chargée du validateur Hibernate.

4voto

chimmi Points 1379

Il semble que le validateur d'Hibernate soit confus avec votre retour de getter. List<String> pour un String champ. Essayez ceci :

public String getTags() {
    return tags;
}

public void setTags(String tags) {
    this.tags = tags;
}

public List<String> getTagsList() {
    return Arrays.asList(tags.split(","));
}

public void setTagsList(List<String> tags) {
    this.tags = String.join(",", tags);
}

Et puis :

<p:chips id="tags" value="#{myController.selected.tagsList}" />

1voto

Ouerghi Yassine Points 851

p:chips utilise une liste comme valeur, pourquoi ne pas utiliser ceci à la place :

private String tags = "aaaa,bbb";

public List<String> getTags() {
    return Arrays.asList(tags.split(","));
}

public void setTags(List<String> tags) {
    this.tags = String.join(",", tags);
}

1voto

Vasile Bors Points 558

Si vous n'avez pas java 8 mais que vous disposez de la bibliothèque Apache Commons Lang, vous pouvez utiliser

StringUtils méthode : org.apache.commons.lang.StringUtils.join(tags, ",") au lieu de String.join(",", tags) ;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X