[英]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.