首页 文章

如何在使用新值更新验证失败后重置表单中的输入字段

提问于
浏览
5

我正在使用PrimeFaces 4.0的JSF 2 .

我有一个带有一些输入和验证的表单 . 从对话框中选择实体时,某些字段可能会自动填充 . 在我提交整个表单(并验证)之前选择实体时,这很好用 . 但是当我在验证后选择实体时,组件的更新不起作用 .

JSF页面:

<h:form id="form">
    <p:inputText id="id" value="#{bean.user.id}" required="true" 
        onclick="PF('usersDialog').show()" />
    <p:inputText id="name" value="#{bean.user.name}" required="true"
        onclick="PF('usersDialog').show()" />
    <p:commandButton value="submit" action="#{bean.submit}" update=":form" />
</h:form>

<p:dialog widgetVar="usersDialog">
    <h:form>
        <p:dataTable value="#{bean.users}" var="user">
            <p:column>
                <p:commandButton value="choose" onclick="PF('usersDialog').hide()"
                    process="@this" action="#{bean.select(user)}" update=":form" />
            </p:column>
            <p:column>
                <h:outputText value="#{user.name}" />
            </p:column>
        </p:dataTable>
    </h:form>
</p:dialog>

我知道它的JSF生命周期,但我无法解决它 . 那么在从对话框中选择新实体时,如何在验证失败后更新表单?

提前致谢 .

2 回答

  • 7

    正是出于这个目的,引入了<p:resetInput> component(基于OmniFaces ResetInputAjaxActionListener) .

    将其嵌入命令按钮,将_2595304设置为与命令按钮的 update 属性相同的客户端ID:

    <p:commandButton ... update=":form">
        <p:resetInput target=":form" />
    </p:commandButton>
    

    另见:

  • 0

    试试这种方式:

    <h:form id="form">
        <p:panel style="width: 80%;">
            <p:fieldset legend="Some User" id="costAuthUser">
                <p:panelGrid columns="3">
                    <h:outputLabel for="costUserId">User-ID</h:outputLabel>
                    <p:inputText id="costUserId" onclick="PF('costAuthDialog').show()"
                        value="#{createCert.costAuthUser.userId }" required="true"
                        requiredMessage="Bitte geben Sie die UserID ein." />
                    <p:message for="costUserId" />
    
                    <h:outputLabel for="costLastName">Name</h:outputLabel>
                    <p:inputText id="costLastName"
                        onclick="PF('costAuthDialog').show()"
                        value="#{createCert.costAuthUser.lastName }" />
                    <!-- <p:watermark value="" for="costLastName"/> -->
                    <p:message for="costLastName" />
                </p:panelGrid>
            </p:fieldset>
    
            <p:separator />
    
            <p:commandButton value="submit" action="#{createCert.prepareEmail }" update=":form"/>
    
        </p:panel>
    <h:form>
    
    
    <p:dialog widgetVar="costAuthDialog" resizable="false" header="Some User">
        <h:form id="dialogForm">
            <p:dataTable value="#{createCert.costAuthList}" var="user">
                <p:column>
                 <p:commandButton value="choose" process="@this"
                    oncomplete="PF('costAuthDialog').hide()" action="#{createCert.selectCostAuth(user) }" update=":form"/>
                </p:column>
    
                <p:column headerText="Name">
                    <h:outputText value="#{user.lastName}" />
                </p:column>
                <!-- Some more -->
            </p:dataTable>
        </h:form>
    </p:dialog>
    

    我认为重新呈现对话框层次结构存在一些问题,这种方式对话框不会更新 .

    你应该使用 oncomplete="PF('costAuthDialog').hide()" 而不是 onclick

相关问题