【问题标题】:JSF Bean validation not workingJSF Bean验证不起作用
【发布时间】:2014-05-29 22:24:28
【问题描述】:

如果我尝试保存具有不正确值的对象,我的 bean 验证工作,这意味着当我执行 Session.saveEntityManager.persist 时会引发异常,但是当我提交时自动 bean 验证不起作用表单,并且有一些字段带有注释,例如:

@NotEmpty
@NotNull
@Size
etc

我已将 hibernate 验证器中的所有必需 .jar 文件添加到我的 WEB-INF/lib 中,但它不起作用。

你有什么特别的事情我应该做的吗?

---------编辑---------- 这是我页面的代码(这是模板)

<body>
    <p:growl id="growl" showDetail="true" autoUpdate="true"/>
    <h:form id="formPrincipalTemplate">
        <p:ajaxStatus style="width:40px;height:40px;position:fixed;right:5px;bottom:18px">  
            <f:facet name="start">  
                <p:graphicImage library="bmp" name="gifCarregando.gif" />  
            </f:facet>  

            <f:facet name="complete">  
                <h:outputText value="" />  
            </f:facet>  
        </p:ajaxStatus>

        <ui:insert name="conteudo">
            <!-- Aqui vai o conteúdo da página! -->
        </ui:insert>

    </h:form>
</body>

这是页面本身(应该执行验证的按钮是值上带有“Gravar”一词的按钮:

<ui:composition template="../template/adminTemplate.xhtml">
    <ui:define name="conteudo">

        <h:panelGroup id="atualiza">
            <div class="btnComandos">
                <p:commandButton value="Novo" actionListener="#{mbAdmin.novo}" disabled="#{!mbAdmin.notModoEdicao}" update=":formPrincipalTemplate:atualiza"/>
                <p:commandButton value="Alterar" actionListener="#{mbAdmin.alterar}" disabled="#{!mbAdmin.notModoEdicao}" update=":formPrincipalTemplate:atualiza"/>
                <p:commandButton value="Gravar" actionListener="#{mbAdmin.gravar}" disabled="#{mbAdmin.notModoEdicao}" update=":formPrincipalTemplate:atualiza"/>
                <p:commandButton value="Excluir" actionListener="#{mbAdmin.excluir}" disabled="#{!mbAdmin.notModoEdicao}" update=":formPrincipalTemplate:atualiza" onclick="return confirm('Deseja realmente excluir?');"/>
                <p:commandButton value="Cancelar" actionListener="#{mbAdmin.cancelar}" disabled="#{mbAdmin.notModoEdicao}" update=":formPrincipalTemplate:atualiza"/>
            </div>
            <br/>
            <p:tabView id="tabView" orientation="left" style="width:80%;margin:auto;" activeIndex="#{mbAdmin.aba}">

                <p:tab title="Consulta">
                    <p:dataTable id="admins" var="adm" value="#{mbAdmin.admins}" rowKey="#{adm.adminCodigo}"  
                            selection="#{mbAdmin.admin}" selectionMode="single">

                        <p:ajax update=":formPrincipalTemplate:atualiza" event="rowSelect" listener="#{mbAdmin.mudarAba}"/>

                        <p:column width="80">
                            <f:facet name="header">
                                <h:outputText value="Código" />
                            </f:facet>
                            <h:outputText value="#{adm.adminCodigo}" />
                        </p:column>
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Nome" />
                            </f:facet>
                            <h:outputText value="#{adm.adminNome}" />
                        </p:column>
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Email" />
                            </f:facet>
                            <h:outputText value="#{adm.adminEmail}" />
                        </p:column>

                    </p:dataTable>
                </p:tab>

                <p:tab title="Cadastro" id="formulario">
                    <h:panelGrid columns="2">
                        <h:outputText value="Código:"/>
                        <h:outputText value="Nome:"/>

                        <p:inputText value="#{mbAdmin.admin.adminCodigo}" disabled="true"/>
                        <p:inputText value="#{mbAdmin.admin.adminNome}" disabled="#{mbAdmin.notModoEdicao}"/>
                    </h:panelGrid>
                    <h:panelGrid columns="2">
                        <h:outputText value="Email:"/>
                        <h:outputText value="Senha:"/>

                        <p:inputText value="#{mbAdmin.admin.adminEmail}" disabled="#{mbAdmin.notModoEdicao}"/>
                        <p:inputText value="#{mbAdmin.admin.adminSenha}" disabled="#{mbAdmin.notModoEdicao}"/>
                    </h:panelGrid>
                </p:tab>

            </p:tabView>
        </h:panelGroup>
    </ui:define>
</ui:composition>

【问题讨论】:

    标签: hibernate validation jsf bean-validation


    【解决方案1】:

    我想问这个作为评论,但我的声誉很低,因此我在这里问。

    您可以通过应用程序将内容写入数据库吗?您的数据库的列是否与您的实体文件一样注释?

    在我使用“Dependencies”文件夹之前,我从未在 WEB-INF/lib 中看到过 .jar 文件。添加某物。到这个文件夹,你右键单击文件夹 Dependencies -> Add Dependency,最好直接使用 maven 项目,你可以将所有依赖项放在一个 pom 文件中,maven 将为你完成剩下的工作。 maven 的依赖项在 Goolge 上很容易找到,只需搜索“休眠依赖项”。如果您使用 maven 项目,您将不再关心 .jar 文件。只需为您喜欢使用的任何内容添加依赖项,maven 就会下载所有内容并将其放在项目中可用的正确位置。您唯一需要做的就是在编写代码后修复您的导入,确保这些包可用于您的类。我希望这或多或少可以理解?

    【讨论】:

    • 是的,我理解,但就我而言,与数据库列和 bean 验证没有关系,因为它只验证 java 端的属性。关于 .JAR,这是一个简单的动态 Web 应用程序,我不想在上面使用 maven,而且无论如何都不能有问题,因为我有另一个这样的应用程序并且 bean 验证有效。 ..
    • 您是否在 bean 上设置了 @Entity 注释? hibernate 是否由您的应用程序启动?
    • 你在正确的地方,注释不需要匹配行配置。我查了一下。
    • 是的,@Entity 存在于 bean 上。
    • 猜你已经解决了这个问题,但我只是想指出在 Majorra 2.2.3+ 中存在一个忽略验证的错误。因此,如果您使用它,请尝试 2​​.2.2 或 2.1.x
    猜你喜欢
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    • 2023-03-04
    • 2013-11-25
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多