1

p:dialog 内の p:dataTable の行を編集できる JSF と PrimeFaces を使用してアプリケーションを開発しています。入力フィールドに検証を追加したので、エラーが発生したときにダイアログを開いたままにして、ダイアログ内のエラー メッセージを置き換えるのに苦労しています。commandButton をクリックすると、ダイアログが閉じてメッセージが表示されなくなります。ダイアログを再度開くと、フィールドは赤くなりますが、メッセージはまだ表示されません。

    <!-- Dialog box for editing row -->
    <p:dialog id="editDialogWindow" header="Row Editing" widgetVar="editDialog" modal="true">
        <p:panelGrid columns="5">
            <p:outputLabel>Title</p:outputLabel>

            <p:outputLabel>Author</p:outputLabel>

            <p:outputLabel>Number Of Pages</p:outputLabel>

            <p:outputLabel>Year Of Publication</p:outputLabel>

            <p:outputLabel>Price</p:outputLabel>

            <p:inputText value="#{libraryBean.selectedBook.title}" id="titleInput" required="True" requiredMessage="You must give the title" />

            <p:inputText value="#{libraryBean.selectedBook.author}" id="authorInput" required="True" requiredMessage="You must give the author" />

            <p:inputText value="#{libraryBean.selectedBook.numberOfPages}" id="numberOfPagesInput" required="True" requiredMessage="You must give the number of pages" />

            <p:inputText value="#{libraryBean.selectedBook.year}" id="yearInput" required="True" requiredMessage="You must give the date of publication" >
                <f:convertDateTime type="date" pattern="dd/MM/yyyy"/>
            </p:inputText>

            <p:inputText value="#{libraryBean.selectedBook.price}" id="priceInput" required="True" requiredMessage="You must give the price" >
                <f:convertNumber maxFractionDigits="2" minFractionDigits="2" />
            </p:inputText>

            <p:commandButton value="Submit Changes" oncomplete="if(!args.validationFailed) {editDialog.close()}" update=":form" actionListener="#{libraryBean.incrementCounter}"/>

            <p:commandButton value="Cancle" onclick="editDialog.close()" update=":form" process="@none" immediate="true"/>

            </p:panelGrid>
            <p:message for="titleInput" />  
            <p:message for="authorInput" /> 
            <p:message for="numberOfPagesInput" />  
            <p:message for="yearInput" />   
            <p:message for="priceInput" />  
    </p:dialog>

編集


私はすべての問題を解決し、参照用の作業コードを提供しています。

        <!-- Dialog box for editing row -->
    <p:dialog id="editDialogWindow" header="Row Editing" widgetVar="editDialog" modal="true">

        <h:form id="dialogForm">
        <p:panelGrid columns="5" rendered="#{!(libraryBean.selectedBook==null)}" id="panelGrid">
            <p:outputLabel>Title</p:outputLabel>

            <p:outputLabel>Author</p:outputLabel>

            <p:outputLabel>Number Of Pages</p:outputLabel>

            <p:outputLabel>Year Of Publication</p:outputLabel>

            <p:outputLabel>Price</p:outputLabel>

            <p:outputLabel>
            <p:inputText value="#{libraryBean.selectedBook.title}" id="titleInput" 
            required="True" requiredMessage="You must give the title" />
            <p:message for="titleInput" />  
            </p:outputLabel>

            <p:outputLabel>
            <p:inputText value="#{libraryBean.selectedBook.author}" id="authorInput" 
            required="True" requiredMessage="You must give the author" />
            <p:message for="authorInput" /> 
            </p:outputLabel>

            <p:outputLabel>
            <p:inputText value="#{libraryBean.selectedBook.numberOfPages}" id="numberOfPagesInput" 
            required="True" requiredMessage="You must give the number of pages" 
            converterMessage="This must be a number"/>
            <p:message for="numberOfPagesInput" />  
            </p:outputLabel>

            <p:outputLabel>
            <p:inputText value="#{libraryBean.selectedBook.year}" id="yearInput" 
            required="True" requiredMessage="You must give the date of publication"
            converterMessage="The date format is dd/mm/yyyy" >
                <f:convertDateTime type="date" pattern="dd/MM/yyyy"/>
            </p:inputText>
            <p:message for="yearInput" />
            </p:outputLabel>

            <p:outputLabel>
            <p:inputText value="#{libraryBean.selectedBook.price}" id="priceInput" 
            required="True" requiredMessage="You must give the price"
            converterMessage="This must be a number " >
                <f:convertNumber maxFractionDigits="2" minFractionDigits="2" />
            </p:inputText>
            <p:message for="priceInput" />
            </p:outputLabel>

            <p:commandButton value="Save" oncomplete="if(!args.validationFailed) editDialog.hide()" update="dialogForm, :form" actionListener="#{libraryBean.incrementCounter}"/>

            <p:commandButton value="Exit" onclick="editDialog.hide()" update="dialogForm" process="@this" immediate="true">
                <p:resetInput target="dialogForm:panelGrid"/>
            </p:commandButton>

            </p:panelGrid>
        </h:form>                   
    </p:dialog>
4

0 に答える 0