【问题标题】:Validation in Primefaces 4.0 blocks applicationPrimefaces 4.0 中的验证块应用程序
【发布时间】:2014-03-06 12:00:22
【问题描述】:

我在使用 Prime Face 4.0 时遇到问题。我使用spring和hibernate框架实现了一个Java web应用程序,prime faces 4.0,JSF。我有一个包含多个选项卡的表单。我使用 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>

谢谢

【问题讨论】:

  • 你的网页在哪里?
  • 只需将其添加到帖子中。看看谢谢:)

标签: java spring hibernate jsf primefaces


【解决方案1】:

确保您的页面中有h:head 标签。

常见问题解答:http://primefaces.org/faq.html

【讨论】:

    【解决方案2】:

    当您尝试转到其他选项卡时,它会尝试提交当前选项卡。由于您的验证失败,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>
    

    如果您输入了一些字段并单击了其他选项卡,则它们将不会被处理并导航到新选项卡。但是当您回来时,您将无法在字段中看到最后输入的值。如果不希望发生这种情况,请在转到其他选项卡之前保存所有字段。

    希望这会有所帮助!!

    【讨论】:

    • 我需要把它放在我的代码中的什么地方?在 之后?我需要在过程中插入什么?
    猜你喜欢
    • 2011-01-28
    • 2011-09-17
    • 2011-12-28
    • 2012-06-17
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多