我尝试将 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 来实现,或者有其他方法吗?