如何在 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?