0

我尝试将 selectManyCheckbox 的值设置为我的 testBean 支持 bean。如果我使用类型的属性List<String>而不是它,Attributed<List<String>>它就可以完美地工作。这是我目前正在使用的解决方法。

但是在我的支持 bean 上,我有一个包含列表的通用对象。javax.el.BeanELResolver将此解析为对象。由于类型擦除,这是正确的。

我试图实现一个自定义 ElResolver。但我应该知道将对象转换为哪种类型。它显然并不总是一个列表。我在 xhtml 页面中有信息。所以我希望我可以传递一些包含信息的子元素,但找不到从 ElResolver 访问子元素的方法。

自定义转换也不起作用,因为它转换 selectItems,而不是列表。

这是最简单的形式

<h:form>
    <p:selectManyCheckbox  value="#{testBean.attributed.value}" >  
        <f:selectItems value="#{testBean.selection}" />  
    </p:selectManyCheckbox>         
    <p:commandButton action="@{testBean.execute}" value="do it" />
</h:form>

和豆子

private Attributed<List<String>> attributed = new Attributed<>();

public Map<String, String> getSelection() {
    return ImmutableMap.<String, String> of("key1", "value1", "key2", "value2");
}

public static class Attributed<T> {
    private T value;

    public T getValue() {
        return value;
    }

    public void setValue(T value) {
        this.value = value;
    }
}

public Attributed<List<String>> getAttributed() {
    return attributed;
}

public void setAttributed(Attributed<List<String>> attributed) {
    this.attributed = attributed;
}

所以问题是:有没有办法testBean.attributed.value直接将值设置为正确的类型。是否可以通过定义自定义 ElResolver 来实现,或者有其他方法吗?

4

0 回答 0