selectManyCheckbox の値を testBean バッキング Bean に設定しようとしています。List<String>
代わりにタイプのプロパティを使用すると、Attributed<List<String>>
完全に機能します。それは私が現在使用している回避策です。
しかし、バッキング Bean には、List を含む汎用オブジェクトがあります。これ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を定義することで可能ですか、それとも他の方法がありますか?