Jsf 如何更新PrimeFaces中的动态文本
我不熟悉PrimeFaces(也不熟悉JSF),我正在尝试根据检索到的数据更新对话消息 视图看起来像:Jsf 如何更新PrimeFaces中的动态文本,jsf,primefaces,Jsf,Primefaces,我不熟悉PrimeFaces(也不熟悉JSF),我正在尝试根据检索到的数据更新对话消息 视图看起来像: <p:dialog id="userDialog" header="Confirmation" widgetVar="userDialog" dynamic="true" modal="true" closable="fasle" width="680px" resizable="false"> <h:form> <b>Em
<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...
}
对于第一个用户,它可以正常工作,但当我为另一个用户获取该对话框时,它会保留来自第一个用户的数据,而不会使用当前更新
此外,我还尝试添加
onHide=“PF('userDialog').content.empty()”
但这将删除整个对话框内容
那么,我如何用新数据破坏和刷新该对话框呢
附言。
不确定我是否需要通过
@PostConstruct
public void init() {}
在我的情况下,fix看起来像
RequestContext.getCurrentInstance().update(":userDialog");
就在
.execute()
部分之后。如果您使用的是Primefaces 7.0+交换前面提到的
RequestContext.getCurrentInstance().update("userDialog");
为了
如果我可以建议您,为
设置一些id,然后使用完整的客户端id,例如
PrimeFaces.current().ajax().update("userDialog:yourFormId");
BalusC已经在这个帖子中回答了一个类似的问题您也是JSF新手吗?@Kukeltje是的-我是PHP guy:D,再次欢迎您!有几种方法,但最重要的是,需要明确何时何地开始更新备份数据?但是开始阅读吧。我尝试使用
RequestContext.getCurrentInstance().update(“userDialog”)代码>紧跟在RequestContext.getCurrentInstance()之后执行(“showDialog('userDialog')”
但是它抛出了ComponentNotFoundException
,那么这不是组件的完整客户端id(并且stackoverflow中有多个Q/A。确定没有冒号它不起作用吗?据我所知,它是自动绝对的(冒号就是这样做的),您需要表单的id(如果对话框周围有一个),否则它将不起作用。引用始终来自“根”。但在这种情况下,窗体在对话框中是的,我知道,答案是针对他的情况。事实上,如果我没有错,窗体在对话框中是可以的。在使用appendTo的情况下,他实际上需要在对话框中。是否有方法更新并显示两行在Google中,Chrome有时会一个接一个地打开userDialog
两次?我不是高级JSF/Primefaces开发者,但我想你不能。但是你可以安全地使用Primefaces.current().executeScript(“PF('userDialog').show()”)并在之后使用更新,正确的行为不会显示两个对话框(从xhtml文件中删除onclick,现在您的bean将显示对话框)。对于旧Primefaces版本,只需使用已知的RequestContext.getCurrentInstance().execute(“PF('userDialog').show()”);
PrimeFaces.current().ajax().update("userDialog");
PrimeFaces.current().ajax().update("userDialog:yourFormId");