我遇到了素面4.0的问题。我使用spring和hibernate框架,prime faces 4.0,JSF实现了一个Java Web应用程序。我有一个包含几个选项卡的表单。我使用require =“true”来验证文本框。因此,如果必填字段留空,则会触发验证消息。
假设我有一个包含4个标签的表单,我有6个必填字段。在填写表单时,我忘记填写6个必填字段中的1个,然后单击“保存”。将显示验证消息,但它会阻止应用程序。我无法点击标签甚至我的菜单栏。它完全阻止了应用程序。
以下是日志中的错误消息:
参考错误:未定义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>
由于
答案 0 :(得分:0)
确保页面中包含h:head
标记。
答案 1 :(得分:0)
当您尝试转到其他标签时,它会尝试提交当前标签。由于验证失败,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>
如果您输入了一些字段并单击其他选项卡,则不会处理它们并导航到新选项卡。但是当你回来时,你将无法在字段中看到最后输入的值。如果不希望这种情况发生,请在转到其他选项卡之前保存所有字段。
希望这有帮助!!