1

DataList内のSelectBooleanCheckboxをクリックすると、現在のアイテムを参照するダイアログを表示できるようにする必要があります。リストをページングするときに、valueChangeで現在のアイテム/インデックスを渡したり、現在のアイテムの記録を保持したりできないようです。どちらも私のために働くでしょう。誰か助けてもらえますか?

ありがとう:)ニール

4

1 に答える 1

0

ビュースコープのBeanを使用すると簡単です。基本的には、データリストの現在のアイテムをBeanのプロパティとして設定し、そのアイテムを表示するダイアログのコンテンツを更新してから、ダイアログを開く必要があります。ダイアログが、保存が成功したときに閉じたい編集フォームを表していると仮定して、データリストも新しい値で更新します。これに使用できます<p:remoteCommand>。もちろん、ダイアログのコマンドボタンの属性にデータリストのクライアントIDを追加することもできますがupdate、検証エラーが発生した場合は不要です。

具体的なキックオフの例を次に示します。

<h:form>
    <p:dataList id="list" value="#{bean.items}" var="item">
        #{item.id} #{item.value}
        <p:commandButton value="edit" 
            action="#{bean.setItem(item)}" 
            update=":editForm" 
            oncomplete="editDialog.show()" />
    </p:dataList>
    <p:remoteCommand name="updateList" update="list" />
</h:form>
<p:dialog widgetVar="editDialog">
    <h:form id="editForm">
        <p:messages autoUpdate="true" />
        <h:inputText value="#{bean.item.value}" required="true" />
        <p:commandButton value="save" 
            action="#{bean.save}" 
            oncomplete="if (!args.validationFailed) { editDialog.hide(); updateList(); }" />
    </h:form>
</p:dialog>

この豆で:

@ManagedBean
@ViewScoped
public class Bean implements Serializable {

    private List<Item> items;
    private Item item;

    @EJB
    private ItemService service;

    @PostConstruct
    public void loadItems() {
        items = service.list();
    }

    public void save() {
        service.save(item);
        loadItems();
    }

    public List<Item> getItems() {
        return items;
    }

    public Item getItem() {
        return item;
    }

    public void setItem(Item item) {
        this.item = item;
    }

}
于 2012-12-06T20:09:09.637 に答える