簡體   English   中英

Primefaces 4.0模塊中的驗證應用

[英]Validation in Primefaces 4.0 blocks application

我在Prime Faces 4.0上遇到問題。 我使用spring和hibernate框架實現了Java Web應用程序,最初面臨4.0 JSF。 我有一個包含幾個選項卡的表單。 我使用require =“ true”來驗證文本框。 因此,如果必填字段留為空白,則會觸發驗證消息。

可以說我有一個包含4個選項卡的表單,並且我有6個必填字段。 在填寫表格時,我忘記填寫6個必填字段之一,然后單擊“保存”。 顯示驗證消息,但它會阻止應用程序。 我無法單擊選項卡,甚至無法單擊菜單欄。 它完全阻止了該應用程序。

以下是日志中的錯誤消息:

參考錯誤:未定義Primefaces

請在下面找到xhtml頁面:

<ui:composition 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"
template="/WEB-INF/jsf/template.xhtml">

<ui:define name="content">
    <h:form prependId="false">


    <p:panel header="#{toydetailsmsgs['toydetails.title']}" style="margin-top:10px">
            <p:messages />

    <h:panelGrid id="detail" columns="2" styleClass="grid" columnClasses="label,value">
        <p:growl id="growl" showDetail="true" sticky="true" />
            <p:tabView id="tabView" dynamic="true">

                <p:tab id="tab1" title="Home">

                    <h:panelGrid id="main" columns="2" styleClass="grid" columnClasses="label,value">
                        <h:outputText value="#{toydetailsmsgs['toydetails.id.title']}:*" />
                        <h:selectOneMenu id="toydetails_id" value="#{ToyDetailsComponent.toydetails.id}"style="width:200px;" required="true">   
                            <f:selectItems value="#{ToyDetailsComponent.toyLists}"
                            var="current" itemValue="#{current.toyCode}"
                            itemLabel="#{current.toyCode} - #{current.toyDesc}" />
                        </h:selectOneMenu>

                        <p:calendar pattern="dd/MM/yyyy" id="toyedetails_dob"
                        value="#{ToyDetailsComponent.toydetails.Dob}"
                        required="true" converter="primefacesCalendarConverter"/>

                    </h:panelGrid>

                </p:tab>

                <p:tab id="tab2" title="Toy Details">
                    <h:panelGrid id="main1" columns="2" styleClass="grid" columnClasses="label,value">
                        <p:calendar pattern="dd/MM/yyyy" id="toydetails_date" value="#{ToyDetailsComponent.toydetails.Date}"
                        required="false" converter="primefacesCalendarConverter" >

                        <p:ajax event="dateSelect" process="toydetails_date"
                        update="toydetails_service" listener="#{ToyDetailsComponent.calculateService()}" />

                        </p:calendar>

                        <h:outputText value="#{toydetailsmsgs['toydetails.service.title']}:" />
                        <h:inputText id="toydetails_service" value="#{ToyDetailsComponent.toydetails.Service}"
                        required="false" label="toydetails_toyservice" disabled="true" style="width: 197px"/>
                    </h:panelGrid>

                </p:tab>

                <p:tab id="tab3" title="Details">
                    <h:panelGrid id="detail5" columns="2" styleClass="grid" columnClasses="label,value">
                        <h:outputText value="#{toydetailsmsgs['toydetails.det.title']}:*" />
                        <h:inputText id="toydetails_det" value="#{ToyDetailsComponent.toydetails.Det}"
                        required="true"  style="width: 197px"/>
                    </h:panelGrid>

                </p:tab>

                </p:tabView>
                </h:panelGrid>

                <h:panelGrid id="button" columns="2" styleClass="grid" columnClasses="label,value">
                <h:panelGroup>
                    <p:commandButton image="save" ajax="false"
                                style="margin-right:20px;"
                                value="#{toydetailsmsgs['navigation.save']}"
                                action="#{ToyDetailsComponent.save|ToyDetails(ToyDetailsComponent.toydetails)}" />
                </h:panelGroup>
                </h:panelGrid>
                </p:panel>

            </h:form>
        </ui:define>
    </ui:composition>

謝謝

確保頁面中包含h:head標記。

常見問題解答: http//primefaces.org/faq.html

當您嘗試轉到其他標簽時,它將嘗試提交當前標簽。 由於您的驗證失敗,因此jsf框架將拋出​​驗證器異常,並直接跳過導航而呈現響應。 為了避免這種添加

 <p:tabView id="tabView" ....>
     <p:ajax event=”tabChange” process="@this" partialSubmit="true"   
               listener="if you wish to execute any action" />  
     <p:tab id="tab1" ../>
     <p:tab id="tab2" ../>  
 </p:tabView>

這樣,如果您輸入了某些字段並單擊了其他選項卡,則不會對其進行處理並導航至新選項卡。 但是,當您回來時,將無法在字段中看到最后輸入的值。 如果不希望發生這種情況,請保存所有字段,然后再轉到其他選項卡。

希望這可以幫助!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM