Primefaces Chips Web组件

5

我有一个 CRUD,我想要更改输入文本区:

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

针对新的Primefaces chips 组件:

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

一个实体类摘录:

@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 方法不行,因为当我点击保存时,会出现异常:

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)

请问有人可以帮我吗?

提前致谢。

附:我已经向Primefaces团队(https://forum.primefaces.org/viewtopic.php?f=3&t=51091)和Primefaces核心开发者(Thomas Andraschko)提出问题,他们建议我向Hibernate验证器团队询问。

3个回答

4

似乎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);
}

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

谢谢你的帮助!我刚刚修改了代码以避免NullPointerException:public List<String> getTagsColabList() { if (tagsColab==null) { tagsColab = ""; } return Arrays.asList(tagsColab.split(",")); } - jMarcel

1
如果您没有Java 8,但有Apache Commons Lang库,您可以使用StringUtils方法:org.apache.commons.lang.StringUtils.join(tags, ",")代替String.join(",", tags)。

1

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);
}

getTags() 方法运行正常,但由于我使用的是 Java 7,所以没有可用的 String.join("someChar",someArray) 方法。我尝试了 this.tags = ("," + tags),但在调用 setTags(List<String> tags) 时仍然遇到了相同的 java.util.ArrayList cannot be cast to java.lang.CharSequence 异常。请问我该如何解决这个问题? - jMarcel
我也尝试过使用Java 8中的String.join(",", tags),但是得到了相同的异常。请问有人可以给个提示吗? - jMarcel
你能否将异常中的其余行粘贴在这里? - Ahmed Raaj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接