Primefaces 芯片 Web 组件
Primefaces Chips Web Component
我有一个 CRUD,我想更改 inputTexArea:
<p:inputTextarea id="tags" value="#{myController.selected.tags}" />
新的 Primefaces chips 组件:
<p:chips id="tags" value="#{myController.selected.tags}" />
实体class摘录:
@Lob
@Size(max = 2147483647)
@Column(name = "tags")
private String tags;
//GETTER AND SETTER OMITTED
get 方法工作正常,因为标签按预期显示在字段中:
public List<String> getTags() {
return Arrays.asList(tags.split(","));
}
但是set方法不是,因为当我点击Save时,出现Exception:
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)
有人可以帮我吗?
提前致谢。
ps.: 我已经向 Primefaces 团队 (https://forum.primefaces.org/viewtopic.php?f=3&t=51091) 询问过这个问题,并且 Primefaces 核心开发人员 (Thomas Andraschko) 指导我询问 Hibernate 验证器团队。
p:chips 使用列表作为值,为什么不使用这个呢:
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);
}
Hibernate 验证器似乎与您的 getter 为 String
字段返回 List<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);
}
然后:
<p:chips id="tags" value="#{myController.selected.tagsList}" />
如果你没有 java 8 但有 Apache Commons Lang 库,你可以使用
StringUtils方法:
org.apache.commons.lang.StringUtils.join(tags, ",") 而不是 String.join(",", tags);
我有一个 CRUD,我想更改 inputTexArea:
<p:inputTextarea id="tags" value="#{myController.selected.tags}" />
新的 Primefaces chips 组件:
<p:chips id="tags" value="#{myController.selected.tags}" />
实体class摘录:
@Lob
@Size(max = 2147483647)
@Column(name = "tags")
private String tags;
//GETTER AND SETTER OMITTED
get 方法工作正常,因为标签按预期显示在字段中:
public List<String> getTags() {
return Arrays.asList(tags.split(","));
}
但是set方法不是,因为当我点击Save时,出现Exception:
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)
有人可以帮我吗?
提前致谢。
ps.: 我已经向 Primefaces 团队 (https://forum.primefaces.org/viewtopic.php?f=3&t=51091) 询问过这个问题,并且 Primefaces 核心开发人员 (Thomas Andraschko) 指导我询问 Hibernate 验证器团队。
p:chips 使用列表作为值,为什么不使用这个呢:
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);
}
Hibernate 验证器似乎与您的 getter 为 String
字段返回 List<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);
}
然后:
<p:chips id="tags" value="#{myController.selected.tagsList}" />
如果你没有 java 8 但有 Apache Commons Lang 库,你可以使用
StringUtils方法: org.apache.commons.lang.StringUtils.join(tags, ",") 而不是 String.join(",", tags);