当单击 DataList 中的 SelectBooleanCheckbox 时,我需要能够显示一个引用当前项目的对话框。在对列表进行分页时,我似乎无法在 valueChange 上传递当前项目/索引或保留当前项目的记录。要么对我有用。有人可以帮忙吗?
谢谢 :) 尼尔
当单击 DataList 中的 SelectBooleanCheckbox 时,我需要能够显示一个引用当前项目的对话框。在对列表进行分页时,我似乎无法在 valueChange 上传递当前项目/索引或保留当前项目的记录。要么对我有用。有人可以帮忙吗?
谢谢 :) 尼尔
如果您使用视图范围的 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;
}
}