0

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を定義することで可能ですか、それとも他の方法がありますか?

4

0 に答える 0