如何在 PrimeFaces 中更新动态文本
how to update dynamic text in PrimeFaces
我是 PrimeFaces(也是 JSF)的新手,我正在尝试根据检索到的数据更新对话消息。
视图看起来像:
<p:dialog id="userDialog" header="Confirmation" widgetVar="userDialog" dynamic="true" modal="true" closable="fasle" width="680px" resizable="false">
<h:form>
<b>Email address #{userListView.email}</b> is already registered with the following user <b>#{userListView.firstName}</b> <b>#{userListView.lasttName}</b>:
<b>Please confirm that you would like to proceed with adding an additional account for this User.</b><br />
<hr />
<div class="ui-confirm-dialog-footer">
<p:commandButton value="Yes" type="button" styleClass="ui-confirmdialog-yes" icon="pi pi-check" onclick="PF('userDialog').hide()" />
<p:commandButton value="No" type="button" styleClass="ui-confirmdialog-no" icon="pi pi-times" onclick="PF('userDialog').hide()" />
</div>
</h:form>
控制器看起来像:
@ManagedBean(name = "userListView")
@ViewScoped
public class UserListView extends DataTableListView implements Serializable {
.....some other code...
public String getFirstName() {
String firstName = "";
List<UserMembership> membershipList = getMembershipList();
if (!membershipList.isEmpty()) {
UserMembership membership = membershipList.get(0);
firstName = membership.getUser().getFirstName();
}
return firstName;
}
public String getLasttName() {
String lastName = "";
List<UserMembership> membershipList = getMembershipList();
if (!membershipList.isEmpty()) {
UserMembership membership = membershipList.get(0);
lastName = membership.getUser().getLastName();
}
return lastName;
}
public String getEmail() {
String email = "";
List<UserMembership> membershipList = getMembershipList();
if (!membershipList.isEmpty()) {
UserMembership membership = membershipList.get(0);
email = membership.getUser().getEmail();
}
return email;
}
....some other code...
}
对话框生成为
RequestContext.getCurrentInstance().execute("showDialog(userDialog')");
对于第一个用户来说它会很好地工作,但是当我为另一个用户获得该对话框时,它会保留第一个用户的数据而不是当前更新的数据。
我也尝试添加
onHide="PF('userDialog').content.empty()"
到对话框,但这将删除整个对话框内容。
我怎样才能用新数据破坏和刷新那个对话框?
PS。
不确定我是否需要通过
完成此操作
@PostConstruct
public void init() {}
在我的情况下修复看起来像
RequestContext.getCurrentInstance().update(":userDialog");
就在 .execute()
部分之后。
如果您使用的是 Primefaces 7.0+ 交换已经提到的
RequestContext.getCurrentInstance().update("userDialog");
为
PrimeFaces.current().ajax().update("userDialog");
如果我可以建议您,请为 <h:form>
设置一些 ID,然后使用完整的客户端 ID,例如
PrimeFaces.current().ajax().update("userDialog:yourFormId");
BalusC 已在此线程中回答了类似的问题 Can I update a JSF component from a JSF backing bean method?
我是 PrimeFaces(也是 JSF)的新手,我正在尝试根据检索到的数据更新对话消息。
视图看起来像:
<p:dialog id="userDialog" header="Confirmation" widgetVar="userDialog" dynamic="true" modal="true" closable="fasle" width="680px" resizable="false">
<h:form>
<b>Email address #{userListView.email}</b> is already registered with the following user <b>#{userListView.firstName}</b> <b>#{userListView.lasttName}</b>:
<b>Please confirm that you would like to proceed with adding an additional account for this User.</b><br />
<hr />
<div class="ui-confirm-dialog-footer">
<p:commandButton value="Yes" type="button" styleClass="ui-confirmdialog-yes" icon="pi pi-check" onclick="PF('userDialog').hide()" />
<p:commandButton value="No" type="button" styleClass="ui-confirmdialog-no" icon="pi pi-times" onclick="PF('userDialog').hide()" />
</div>
</h:form>
控制器看起来像:
@ManagedBean(name = "userListView")
@ViewScoped
public class UserListView extends DataTableListView implements Serializable {
.....some other code...
public String getFirstName() {
String firstName = "";
List<UserMembership> membershipList = getMembershipList();
if (!membershipList.isEmpty()) {
UserMembership membership = membershipList.get(0);
firstName = membership.getUser().getFirstName();
}
return firstName;
}
public String getLasttName() {
String lastName = "";
List<UserMembership> membershipList = getMembershipList();
if (!membershipList.isEmpty()) {
UserMembership membership = membershipList.get(0);
lastName = membership.getUser().getLastName();
}
return lastName;
}
public String getEmail() {
String email = "";
List<UserMembership> membershipList = getMembershipList();
if (!membershipList.isEmpty()) {
UserMembership membership = membershipList.get(0);
email = membership.getUser().getEmail();
}
return email;
}
....some other code...
}
对话框生成为
RequestContext.getCurrentInstance().execute("showDialog(userDialog')");
对于第一个用户来说它会很好地工作,但是当我为另一个用户获得该对话框时,它会保留第一个用户的数据而不是当前更新的数据。
我也尝试添加
onHide="PF('userDialog').content.empty()"
到对话框,但这将删除整个对话框内容。
我怎样才能用新数据破坏和刷新那个对话框?
PS。 不确定我是否需要通过
完成此操作 @PostConstruct
public void init() {}
在我的情况下修复看起来像
RequestContext.getCurrentInstance().update(":userDialog");
就在 .execute()
部分之后。
如果您使用的是 Primefaces 7.0+ 交换已经提到的
RequestContext.getCurrentInstance().update("userDialog");
为
PrimeFaces.current().ajax().update("userDialog");
如果我可以建议您,请为 <h:form>
设置一些 ID,然后使用完整的客户端 ID,例如
PrimeFaces.current().ajax().update("userDialog:yourFormId");
BalusC 已在此线程中回答了类似的问题 Can I update a JSF component from a JSF backing bean method?