簡體   English   中英

Primefaces芯片Web組件

[英]Primefaces Chips Web Component

我有一個CRUD,我想更改inputTexArea:

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

到新的Primefaces 芯片組件:

<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方法不是,因為當我點擊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)

有人能幫助我嗎 ?

提前致謝。

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

然后:

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

p:芯片使用列表作為值,為什么不使用它代替:

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

如果你沒有java 8但是有Apache Commons Lang庫,你可以使用

StringUtils方法:org.apache.commons.lang.StringUtils.join(tags,“,”)而不是String.join(“,”,tags);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM