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