【发布时间】:2012-12-06 16:59:43
【问题描述】:
当单击 DataList 中的 SelectBooleanCheckbox 时,我需要能够显示一个引用当前项的对话框。在对列表进行分页时,我似乎无法在 valueChange 上传递当前项目/索引或保留当前项目的记录。要么对我有用。有人可以帮忙吗?
谢谢 :) 尼尔
【问题讨论】:
标签: jsf-2 primefaces
当单击 DataList 中的 SelectBooleanCheckbox 时,我需要能够显示一个引用当前项的对话框。在对列表进行分页时,我似乎无法在 valueChange 上传递当前项目/索引或保留当前项目的记录。要么对我有用。有人可以帮忙吗?
谢谢 :) 尼尔
【问题讨论】:
标签: jsf-2 primefaces
如果您使用视图范围的 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>
用这个 bean:
@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;
}
}
【讨论】:
<p:ajax>。它还提供了一个oncomplete 属性(使用标准JSF <f:ajax> 你必须摆弄onevent 属性)。