0

データベースからいくつかの値を表示し、リストから単一の値が選択されたときにさらに処理を行うには、リスト ボックスを使用する必要があります。

PrimeFaces ショーケース サイトでは、この例では固定 (静的) データをリストボックスにロードし、リスト項目ごとに 1 つの PrimeFaces コマンドがあります。アイテムの数が事前にわからない場合に、リスト ボックスにアイテムを動的に表示するにはどうすればよいですか?

リストで選択した項目に対応するテキストをテキストエリアに表示する必要もあります。この目的のためにイベントリスナーを使用する必要がありますか? 最初のテキスト領域を空白のままにしたいと思います。リストボックスで値が選択されている場合にのみ、Bean を使用して、そのテキストエリアを使用してデータを取得および保存したいと考えています。これは可能ですか?これを実装するにはどうすればよいですか?

4

2 に答える 2

3

事前にアイテム数がわからない場合、リストボックスにアイテムを動的に表示するにはどうすればよいですか?

<f:selectItems>プロパティにバインドするものを使用しますList<T>。基本的な例では、EJB/JPAを使用してDBと対話していると仮定します。

private Item selectedItem; // +getter+setter
private List<Item> availableItems; // +getter

@EJB
private ItemService service;

@PostConstruct
public void init() {
    availableItems = service.list();
}

<p:selectOneListbox value="#{bean.selectedItem}" converter="itemConverter">
    <f:selectItems value="#{bean.availableItems}" var="item"
        itemValue="#{item}" itemLabel="#{item.someLabel}" />
</p:selectOneListbox>    

は、オブジェクトをitemConverter実装してオブジェクトからその一意の文字列表現(通常はDB識別子)に変換し、その逆に変換する必要があります。javax.faces.convert.ConverterItemgetAsString()getAsObject()


また、リストで選択したアイテムに対応するテキストをテキストエリアに表示する必要があります。この目的でイベントリスナーを使用する必要がありますか?

テキストエリアを更新するリストボックスに<p:ajax>(標準のJSFと同等のPrimeFaces)を入力するだけです。<f:ajax>例えば

<p:selectOneListbox value="#{bean.selectedItem}" converter="itemConverter">
    <f:selectItems value="#{bean.availableItems}" var="item"
        itemValue="#{item}" itemLabel="#{item.someLabel}" />
    <p:ajax update="textarea" />
</p:selectOneListbox>    
<p:inputTextarea id="textarea" value="#{bean.selectedItem.someText}" />

アイテムを選択すると呼び出されます。

参照:

于 2012-06-25T02:23:47.363 に答える
1

はい、デモンストレーションの目的で、ほとんどの例には静的データがロードされています。しかし、PFショーケースで同じ例を見ると、2番目のリストボックスコードは次のようになります。

<h:outputText value="Scrollbar: " />
    <p:selectOneListbox id="scroll" value="#{autoCompleteBean.selectedPlayer1}"
        converter="player" style="height:100px">
        <f:selectItems value="#{autoCompleteBean.players}"
            var="player" itemLabel="#{player.name}" itemValue="#{player}" />
    </p:selectOneListbox>

f:selectItems value属性は、コレクション、配列、マップ、またはSelectItemインスタンスを指すことができます。したがって、上記の例のプレーヤーは、マネージドBeanのデータベースを使用して入力されている任意のリストである可能性があります。

ただし、インスタンスがSelectItemでない場合、ラベルは各オブジェクトでtoStringを呼び出すことによって取得され、最後に選択されたitemValueがselectedPlayer1属性に設定されますが、間にコンバーターがあるため、着信itemValue文字列が変換されます。プレーヤーオブジェクトに戻り、selectedPlayer1に設定します。

また、選択したアイテムをテキスト領域に表示する場合は、次のようにすることができます。

 <h:outputText value="Scrollbar: " />
    <p:selectOneListbox id="scroll" value="#{autoCompleteBean.selectedPlayer1}"
        converter="player" style="height:100px">
        <f:selectItems value="#{autoCompleteBean.players}"
            var="player" itemLabel="#{player.name}" itemValue="#{player}" />
            <p:ajax update="displayArea"/>
    </p:selectOneListbox>

 <p:inputTextarea id="displayArea" value="#{autoCompleteBean.selectedPlayer1}" />

ここで、inputTextareaは、ユーザーが選択した値でajaxを使用して更新されます。

于 2012-06-25T02:24:01.777 に答える