标签: bean-validation

JSF/Hibernate NotBlank验证

我有一个简单的JSF + RichFaces表单,有一些字段,显然是一个支持bean来存储它们.在那个bean中,所有必需的属性都有验证注释(jsr303/hibernate),但我似乎无法找到一个注释来检查属性(String)是否为空.我知道spring模块中有@NotBlank注释,但JSF不支持spring验证.有没有简单的方法来检查它,还是我应该编写自己的注释?

@Edit:我已经尝试过来自jsr303和hibernate的@NotNull和@NotEmpty,但是他们都失败了我仍然可以发送一个像""这样的空白字符串.

java validation jsf richfaces bean-validation

0
推荐指数
1
解决办法
6119
查看次数

JSR303 ConstraintValidator,如何在没有错误页面的情况下显示消息

我正在使用JSF 2.0和Glassfish v3.我正在测试JSR303 bean验证的功能,所以我创建了一个验证器,它实现ConstraintValidator然后在我要验证的属性上注释它.

它工作正常,但它显示Glassfish默认错误页面.我不希望这个显示,我宁愿把消息显示在一个<h:outputText>或什么的.

有谁知道如何实现这一目标?

这是我的验证方法:

@Override
public boolean isValid(String searchArg, ConstraintValidatorContext ctx) {

    boolean searchArgCorrect = true;
    FacesMessage msg;
    if(searchArg!=null) {
        ctx.disableDefaultConstraintViolation();
        if(searchArg.length() < 3) {
            ctx.buildConstraintViolationWithTemplate("Searcharg is too short").addConstraintViolation();
            searchArgCorrect=false;

            msg = new FacesMessage(
                    FacesMessage.SEVERITY_ERROR,
                    "Searcharg is too short", null);

            throw new  ValidatorException(msg);
        }
    }

    return searchArgCorrect;
}
Run Code Online (Sandbox Code Playgroud)

PS:我知道有更简单的方法来验证字符串的长度,但上面的代码片段仅用于演示/测试目的.我有另一个验证器的计划.

bean-validation java-ee-6 jsf-2

0
推荐指数
1
解决办法
1909
查看次数

没有获得JSR303注释与Tomcat 7一起使用

经过几个小时的谷歌和一些教程,我被打败了...事实并非我得到错误可以给我提示问题是什么,完全没有它们让我疯了!

以下代码有效,只是不应该!检查输入不是null或小于3个字符长的注释永远不会运行.在部署项目或写入名称变量时,它们也不会发出任何错误.

public class testBean
{
    @NotNull
    @Size(min=3)
    private String name;
}

public void test()
{
    System.out.println(name);
}
Run Code Online (Sandbox Code Playgroud)

输入表格:

<h:form>
        <h:inputText value="#{testBean.name}" />
    <h:commandButton value="Send" action="#{testBean.test()}" />
</h:form>
Run Code Online (Sandbox Code Playgroud)

我的猜测是,这是导致问题的tomcat,虽然我很确定我已经导入了所有必要的库.对于我正在使用的IDE,Eclipse也是如此.

java bean-validation jsf-2 tomcat7

0
推荐指数
1
解决办法
4380
查看次数

如何阻止DefaultListableBeanFactory隐式创建LocalValidatorFactoryBean实例

我正在使用Spring 3.1并使用以下spring配置,我LocalValidatorFactoryBean使用自己的显式创建ValidationMessageSource.我的类路径中有Hibernate Validator 4.1.

<bean id="messageSource"
      class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>ValidatorMsgID</value>
        </list>
    </property>
</bean>

<bean id="validator"
      class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    <property name="validationMessageSource" ref="messageSource"/>
</bean>

<bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor"/>
Run Code Online (Sandbox Code Playgroud)

但是我注意到,LocalValidatorFactoryBean通过在类afterPropertiesSet方法中调试调试来创建两次.第一次是我在spring配置中定义的explicite bean,但是随后同一个类被类隐式重新实例化DefaultListableBeanFactory- 显然这次没有validationMessageSource.因此,当Spring确实使用LocalValidatorFactoryBean默认Hibernates messagesource而不是我指定的那个时使用它.

好吧,进一步研究它似乎这是由mvc:annotation-driven我在spring配置中引起的.任何指针仍然会有所帮助

java spring bean-validation

0
推荐指数
1
解决办法
2426
查看次数

跨域bean验证 - 为什么你不工作

我的应用程序在这里遇到了一些问题.我想检查字段密码和确认密码是否匹配在一起,所以我尝试在这个问题的第一个答案中这样做:使用Hibernate Validator进行交叉字段验证(JSR 303)

问题是它实际上不起作用,我没有想法为什么.请帮我!这是我在这里的第一篇文章,所以请不要对我太苛刻.

这是我的注释:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pl.lodz.p.zsk.ssbd2012.ssbd12.ValidationConstraints;

import java.lang.annotation.*;
import javax.validation.Constraint;
import javax.validation.Payload;

/**
 *
 * @author lukasz
 */
@Documented
@Constraint(validatedBy = FieldMatchValidator.class)
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface FieldMatch {

String message() default "{pl.lodz.p.zsk.ssbd2012.ssbd12.ValidationConstraints.FieldMatch}";

Class<?>[] groups() default {};

Class<? extends Payload>[] payload() default {};

String first();

String second();
}
Run Code Online (Sandbox Code Playgroud)

这是我的ValidatorClass:

/*
 * To change this template, choose Tools | Templates
 * …
Run Code Online (Sandbox Code Playgroud)

validation hibernate-validator bean-validation jsf-2 managed-bean

0
推荐指数
1
解决办法
3420
查看次数

Vaadin 7 - Bean验证

我一直在尝试Vaadin 7.首先,我必须管理我在Vaadin安静的一个菜鸟并且对JAVA持久性不太熟悉.因此,我正在尝试学习bean验证以及如何使用它.我已经按照几个教程,但很难确定哪个是Vaadin 7的最新和正确的.尽管如此,我尝试下载并使用JPA容器和BeanValidator,我无法让它工作.这是我正在使用的代码:

package com.example.firstvaadin;

import java.io.Serializable;

import org.hibernate.validator.constraints.Email;
import javax.validation.constraints.*;

public class RegisterBean implements Serializable{

    public  RegisterBean(String email){
        this.email = email;
    }

    @Size(min = 5, max = 50)
    private String email;

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEmail() {
        return email;
    }
}
Run Code Online (Sandbox Code Playgroud)

RegisterBean rbean = new RegisterBean("");
BeanItem<RegisterBean> item = new BeanItem<RegisterBean>(rbean);
TextField email = new TextField("email",item.getItemProperty("email"));
email.setImmediate(true);
layout.addComponent(email);
email.setNullRepresentation("");
Run Code Online (Sandbox Code Playgroud)

但是我在下面的代码中遇到了运行时异常:email.addValidator(new BeanValidator(RegisterBean.class,"email"));

The exception is:
    aused by: com.vaadin.event.ListenerMethod$MethodException: Invocation of method buttonClick …
Run Code Online (Sandbox Code Playgroud)

jpa exception vaadin bean-validation classnotfoundexception

0
推荐指数
1
解决办法
8316
查看次数

对于JSF JPA中的可选字段,使大小验证器忽略null?

假设我有一个带有文本字段的表,名为player,它是null.所以允许空值,但如果不是null(有一个值),文本/字符串的大小必须在10到100之间.我有这个开始:

@Column(name = "player", nullable = true)
@Size(min = 5, max = 100)
private String player;
Run Code Online (Sandbox Code Playgroud)

但是当将字段设置为null时,JSF页面会抛出验证错误.

有没有办法让Size验证器忽略空值?

java validation jsf bean-validation wildfly

0
推荐指数
1
解决办法
1166
查看次数

Spring Boot Vaadin 验证不起作用 - 为什么?

我将 Vaadin 14 与 Vaadin CRUD AddOns 一起使用,但我的验证似乎对我不起作用。

如果我打开我的 CRUD 视图并查看这两个字段。它们是空字符串,例如 null。我想收到一个错误“不能为空”。但在这里,我完全没有错误。

在此处输入图片说明

我的实体看起来像这样。

@Entity(name = "Data")
@Data
public class Data {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    
    @NotNull
    private String OrderNumber;
    @NotNull
    private String SerialNumber;
Run Code Online (Sandbox Code Playgroud)

如果我尝试保存到我的数据库,它看起来像这样。

Caused by: javax.validation.ConstraintViolationException: Validation failed for classes [se.danielmartensson.entities.LX_Data] during update time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
    ConstraintViolationImpl{interpolatedMessage='must not be null', propertyPath=SerialNumber, rootBeanClass=class se.danielmartensson.entities.Data, messageTemplate='{javax.validation.constraints.NotNull.message}'}
    ConstraintViolationImpl{interpolatedMessage='must not be null', propertyPath=OrderNumber, rootBeanClass=class se.danielmartensson.entities.Data, messageTemplate='{javax.validation.constraints.NotNull.message}'}
]
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为我的pom.xml已经Spring Boot Starter Validation …

crud vaadin bean-validation spring-boot vaadin14

0
推荐指数
1
解决办法
66
查看次数