Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 如何更新PrimeFaces中的动态文本_Jsf_Primefaces - Fatal编程技术网

Jsf 如何更新PrimeFaces中的动态文本

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

我不熟悉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...
}
对于第一个用户,它可以正常工作,但当我为另一个用户获取该对话框时,它会保留来自第一个用户的数据,而不会使用当前更新

此外,我还尝试添加

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");