jMa*_*cel 5 java jsf hibernate primefaces bean-validation
我有一个CRUD,我想更改inputTexArea:
<p:inputTextarea id="tags" value="#{myController.selected.tags}" />
Run Code Online (Sandbox Code Playgroud)
到新的Primefaces 芯片组件:
<p:chips id="tags" value="#{myController.selected.tags}" />
Run Code Online (Sandbox Code Playgroud)
实体类摘录:
@Lob
@Size(max = 2147483647)
@Column(name = "tags")
private String tags;
//GETTER AND SETTER OMITTED
Run Code Online (Sandbox Code Playgroud)
该GET方法工作得很好,因为预期的标签显示领域:
public List<String> getTags() {
return Arrays.asList(tags.split(","));
}
Run Code Online (Sandbox Code Playgroud)
但是set方法不是,因为当我点击Save时,会发生异常:
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)
Run Code Online (Sandbox Code Playgroud)
有谁可以帮助我吗 ?
提前致谢.
ps.:我已经向Primefaces团队询问了这个问题(https://forum.primefaces.org/viewtopic.php?f=3&t=51091),Primefaces的核心开发人员(Thomas Andraschko)指导我去问Hibernate验证团队.
看起来 Hibernate 验证器与返回字段的 getter 混淆List<String>了String。尝试这个:
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);
}
Run Code Online (Sandbox Code Playgroud)
进而:
<p:chips id="tags" value="#{myController.selected.tagsList}" />
Run Code Online (Sandbox Code Playgroud)