【问题标题】:Primefaces Chips Web ComponentPrimefaces 芯片 Web 组件
【发布时间】:2017-08-15 05:36:06
【问题描述】:

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

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

有人可以帮帮我吗?

提前致谢。

ps.:我已经向 Primefaces 团队 (https://forum.primefaces.org/viewtopic.php?f=3&t=51091) 提出了这个问题,Primefaces 核心开发人员 (Thomas Andraschko) 指导我询问 Hibernate 验证器团队。

【问题讨论】:

    标签: java hibernate jsf primefaces bean-validation


    【解决方案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&lt;String&gt; tags) 时得到了相同的java.util.ArrayList cannot be cast to java.lang.CharSequence 异常。请问,我该如何解决?
    • 我也尝试使用 String.join(",", tags) 使用 Java 8,但遇到了同样的异常。拜托,谁能给个提示?
    • 能否将其余行粘贴到异常中?
    【解决方案2】:

    Hibernate 验证器似乎与您为 String 字段返回 List&lt;String&gt; 的 getter 混淆了。试试这个:

    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&lt;String&gt; getTagsColabList() { if (tagsColab==null) { tagsColab = ""; } return Arrays.asList(tagsColab.split(",")); }
    【解决方案3】:

    如果你没有 java 8 但有 Apache Commons Lang 库,你可以使用

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

    【讨论】:

      猜你喜欢
      • 2020-08-25
      • 2020-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-14
      • 2019-05-23
      • 1970-01-01
      • 2011-03-11
      相关资源
      最近更新 更多