标签: bean-validation

如何在actionListener或action方法中执行JSF验证?

我的Bean验证在我的应用程序中运行良好.现在我想检查新用户是否选择了已经选择的用户名.

在actionlistener中,我有检查数据库的代码,但如果用户选择已存在的用户名,如何强制用户被发送回他们所在的页面?

validation jsf bean-validation

14
推荐指数
1
解决办法
2万
查看次数

什么用,托管bean(支持bean)或实体bean?

我看到很多将bean标记为实体bean(@Entity)和命名bean(CDI)的示例,以避免创建2个类(托管bean和实体bean)以及使用Bean Validation以便可以执行验证在客户端和服务器上.

那么我是否应该使用单个类,是否存在任何问题,或者我是否应该使用托管bean中的数据创建托管bean或服务层创建实体bean?

entity bean-validation jsf-2 managed-bean

14
推荐指数
1
解决办法
6192
查看次数

使用HibernateValidator进行交叉字段验证不会显示任何错误消息

我正在使用此答案中HibernateValidator指定的表格上的两个字段"password"和"confirmPassword"进行验证.以下是约束描述符(验证器接口).

package constraintdescriptor;

import constraintvalidator.FieldMatchValidator;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.TYPE;
import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Target;

@Target({TYPE, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = FieldMatchValidator.class)
@Documented
public @interface FieldMatch
{
    String message() default "{constraintdescriptor.fieldmatch}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};

    /**
     * @return The first field
     */
    String first();

    /**
     * @return The second field
     */
    String second();

    /**
     * Defines several <code>@FieldMatch</code> annotations on the …
Run Code Online (Sandbox Code Playgroud)

spring jsp spring-mvc hibernate-validator bean-validation

14
推荐指数
1
解决办法
1万
查看次数

Hibernate @OneToOne @NotNull

在关系中声明@OneToOne@NotNull双方是否有效,例如:

class ChangeEntry
{
    @OneToOne(cascade=CascadeType.ALL)
    @NotNull
    ChangeEntryDetails changeEntryDetails;

    public void addDetails(ChangeEntryDetails details) {
       this.changeEntryDetails = details;
       details.setChangeEntry(this);
    }
 }

 class ChangeEntryDetails
 {
     @OneToOne(cascase=CascadeType.ALL)
     @NotNull
     ChangeEntry changeEntry;

     public void setChangeEntry(ChangeEntry changeEntry)
     {
          this.changeEntry = changeEntry;
     }
 }
Run Code Online (Sandbox Code Playgroud)

我找不到任何说这是无效的东西,但似乎在持久性过程中至少有一方必须违反.(例如,如果首先编写changeEntry,则changeEntryDetails将暂时为null).

尝试这个时,我看到一个异常抛出not-null property references a null or transient value.

如果可能的话,我想避免放松约束,因为双方都必须在场.

java orm hibernate jpa bean-validation

13
推荐指数
1
解决办法
1万
查看次数

GWT JSR 303客户端验证

我正在开发一个使用JSR 303验证的Spring后端的GWT应用程序.应用程序可以脱机并使用浏览器HTML5/Gears数据库.

实现客户端验证的最佳方法是什么?到目前为止,我已经找到了gwt-validation框架(http://code.google.com/p/gwt-validation/),但它似乎已不再有效.

谢谢!

更新:

有一个新的GWT官方项目来支持JSR 303 Bean Validation(链接在这里).IMO这是项目成熟后的方法.

validation gwt bean-validation

13
推荐指数
2
解决办法
8180
查看次数

在回调事件上执行自动Bean验证时违反了Bean验证约束:'prePersist'

我在Netbeans 7中创建了一个EJB Session facade来保存我的实体.我的保险和RatePlan类之间有很多映射.

public class Insurance{
    @ManyToOne(optional=false) 
    @JoinColumn(name="PLAN_ID")
    private RatePlan plan;
}
public class RatePlan{
    @OneToMany(mappedBy="plan")
    private Set<Insurance> insuranceItems;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用EJB会话Bean保存数据库时,遇到以下错误.

引起:javax.validation.ConstraintViolationException:在回调事件上执行自动Bean验证时违反了Bean验证约束:'prePersist'.有关详细信息,请参阅嵌入式ConstraintViolations.

我所做的是在我的Persistence.xml文件中关闭我的Bean验证.我想知道发生了什么Bean验证错误,但我不知道如何或在哪里找到它或如何配置和捕获它.

我的EJB外观是一个像tis这样的简单类.

public class InsuranceFacade{
    public void saveInsurance(Insurance insurance){
        em.persist(insurance);
    }
}
Run Code Online (Sandbox Code Playgroud)

任何提示?

jpa java-ee bean-validation

13
推荐指数
3
解决办法
2万
查看次数

如何有效地支持JSR-303验证和Jackson JSON映射?

在使用Spring MVC构建RESTful Web服务时,我觉得在尝试组合Jackson JSON反序列化和JSR-303 bean验证时遇到了棘手的情况.

关于JSR-303验证的一个好处是,可以返回与目标对象关联的所有验证错误,而不是仅在第一个约束违规时失败(尽管如果要使用它,则存在失败快速模式).

想象一下你有一个JSON有效载荷的场景,例如:

{
   "firstname": "Joe",
   "surname": "Bloggs",
   "age": 25
}
Run Code Online (Sandbox Code Playgroud)

然后你有想要映射到的对象:

public class Person {

   @NotNull
   private String firstname;

   @NotNull
   private String surname;

   @Min(value = 0)
   private int age;

   ...
}
Run Code Online (Sandbox Code Playgroud)

我对此设置的问题是,如果客户端发送一个字符串作为"年龄"的值,整个杰克逊反序列化过程将失败而不能专门针对它失败的原因(即我们永远不会得到验证) ).想象一下,这个有效载荷:

{
   "age": "invalid"
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我想要返回的是"错误"响应,例如:

{ 
   "errors" : [
      "error": {
         "field": "firstname",
         "message": "Must not be null",
      },
      "error": {
         "field": "surname",
         "message": "Must not be null",
      },
      "error": {
         "field": "age",
         "message": "Must be numeric value greater than or equal …
Run Code Online (Sandbox Code Playgroud)

json spring-mvc jackson bean-validation

13
推荐指数
1
解决办法
3821
查看次数

BigDecimal的JPA @Size注释

如何使用@SizeMySQL DECIMAL(x,y)列的注释?

我正在使用BigDecimal,但是当我尝试包含@Size max它时它不起作用.这是我的代码:

@Size(max = 7,2)
@Column(name = "weight")
private BigDecimal weight;
Run Code Online (Sandbox Code Playgroud)

java mysql jpa bean-validation

13
推荐指数
3
解决办法
3万
查看次数

在JSR-303自定义验证器中未自动装配的依赖关系

我有一个包含User类的Spring Boot应用程序 - 所有字段都有标准的JSR-303注释(@ NotNull,@ Size等),并且验证工作正常.

但是,当我向User添加自定义验证时,我无法将依赖注入到自定义验证器中:

@Component
public class UniqueUsernameValidator implements 
ConstraintValidator<UniqueUsername, String> {

@Autowired
private UserRepository userRepository;

@Override
public boolean isValid(String username, ConstraintValidatorContext context) {
    // implements logic
}
Run Code Online (Sandbox Code Playgroud)

@UniqueUsername注释声明为:

@Documented
@Retention(RUNTIME)
@Target({FIELD, ANNOTATION_TYPE, PARAMETER})
@Constraint(validatedBy = UniqueUsernameValidator.class)
@interface UniqueUsername {
   String message() default "{com.domain.user.nonUniqueUsername}";
   Class<?>[] groups() default { };
   Class<? extends Payload>[] payload() default { };
}
Run Code Online (Sandbox Code Playgroud)

带注释的字段:

@NotBlank
@Size(min = 2, max = 30)
@UniqueUsername
private String username;
Run Code Online (Sandbox Code Playgroud)

验证器用法:

@Service
public final class UserService {

   private …
Run Code Online (Sandbox Code Playgroud)

java spring bean-validation

13
推荐指数
1
解决办法
640
查看次数

Spring Boot 无法自动装配 @ConfigurationProperties

这是我的FileStorageProperties课:

 @Data
 @ConfigurationProperties(prefix = "file")
 public class FileStorageProperties {
       private String uploadDir;
 }
Run Code Online (Sandbox Code Playgroud)

这让我说:未通过 @enableconfigurationproperties 注册或标记为 spring 组件

这是我的FileStorageService

@Service
public class FileStorageService {

private final Path fileStorageLocation;

@Autowired
public FileStorageService(FileStorageProperties fileStorageProperties) {
    this.fileStorageLocation = Paths.get(fileStorageProperties.getUploadDir())
            .toAbsolutePath().normalize();

    try {
        Files.createDirectories(this.fileStorageLocation);
    } catch (Exception ex) {
        throw new FileStorageException("Could not create the directory where the uploaded files will be stored.", ex);
    }
}

public String storeFile(MultipartFile file) {
    // Normalize file name
    String fileName = …
Run Code Online (Sandbox Code Playgroud)

java spring bean-validation spring-boot spring-restcontroller

13
推荐指数
1
解决办法
1万
查看次数