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 回答