primefaces p:commandButton update属性更新p:messages组件失败



我有一个PrimeFaces <p:commandButton update=":messages",在发送表单后不显示p:messages,但如果我使用update="@all",它会更新p:messages,我可以看到显示的消息。

我尝试了许多其他组合,如update="messages", update="NewRegistryForm:messages", update="@form :messages", render=":messages"…但其他方法似乎都不起作用。知道为什么会这样吗?

RegistryInputNewBean.processRequest上,我只是像这样更新消息组件:

FacesContext.getCurrentInstance().addMessage(
    null,
    new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "error_processing_request")
);

包含p:messagesmytemplate.xhtml是这样的:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui"
    lang="en"
>
    <f:view contentType="text/html" encoding="UTF-8" locale="en">
        <h:head>
            <title>test</title>
        </h:head>
        <h:body id="pageBody">
            <p:messages id="messages" showDetail="true" autoUpdate="true" closable="true" showSummary="false"/>
            <ui:insert name="content" />
        </h:body>
    </f:view>
</html>

myform.xhtml是这样的:

<!DOCTYPE html>
<html 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:p="http://primefaces.org/ui"
>
<ui:define name="content">
<ui:composition template="mytemplate.xhtml">
        <h:form id="NewRegistryForm">
                <p:commandButton 
                    id="sendButton"
                    type="submit" 
                    action="#{registryInputNewBean.processRequest}" 
                    update="@all"
                    style="display:none" />
        </h:form>
</ui:composition>
</ui:define>
</html>

p:messages不在表单内,这就是为什么按钮不会单独更新组件,只有当您放置@all时,才能刷新页面中的所有组件。

如果你把另一个包含p:message的表单放在里面,你将能够用update="fooForm:fooMessages"更新组件

你可以在bean上更新

RequestContext rc = RequestContext.getCurrentInstance();
rc.update("id");

最新更新