JSF ElResolver返回带有泛型的错误类型

时间:2013-07-26 09:44:35

标签: jsf-2

我尝试将selectManyCheckbox的值设置为testBean支持bean。 如果我使用List<String>类型的属性而不是Attributed<List<String>>,那么它的效果非常好。这是我目前正在使用的解决方法。

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

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

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

这是最简单的表格

<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,还是有其他方法来实现它?

0 个答案:

没有答案