Jsf JSR-303 Bean验证在验证时更改值

Jsf JSR-303 Bean验证在验证时更改值,jsf,bean-validation,Jsf,Bean Validation,在JSR-303中,是否有任何方法在验证时更改值 公共类MyEntity{ 公共字符串getName(){ 返回名称; } //JSF/JAXB/JPA是否总是使用这种setter方法? public void setName(最终字符串名){ if(name==null){ 抛出新的NullPointerException(“空名称”); } 最终折叠的字符串=新的CollapsedStringAdapter().unmarshal(名称); 如果(折叠的.length()名称\u大小\u最大

在JSR-303中,是否有任何方法在验证时更改值

公共类MyEntity{
公共字符串getName(){
返回名称;
}
//JSF/JAXB/JPA是否总是使用这种setter方法?
public void setName(最终字符串名){
if(name==null){
抛出新的NullPointerException(“空名称”);
}
最终折叠的字符串=新的CollapsedStringAdapter().unmarshal(名称);
如果(折叠的.length()名称\u大小\u最大值){
抛出新的IllegalArgumentException(“太长”);
}
this.name=崩溃;
}
@NotNull
@尺寸(最小值=1,最大值=40)
@CollapsedStringSize(最小值=1,最大值=40)//xs:token
私有字符串名称;
@NotNull
@大小(最小值=0,最大值=255)
@NormalizedStringSize(最小值=0,最大值=255)//xs:normalizedString
私有字符串描述;
}
我要做一个定制的验证器

@Constraint(validatedBy=CollapsedStringSizeValidator.class)
public@interface CollapsedStringSize{
int min()默认值为0;
int max()默认整数.max\u值;
}
公共类CollapsedStringSizeValidator
实现约束验证器{
@凌驾
公共布尔值是有效的(字符串对象,
CONSTRAINTVALIDATA或CONTEXT constraintContext){
if(object==null){
返回true;
}
最终折叠的字符串=新的CollapsedStringAdapter().unmarshal(对象);
//我怎样才能得到最小值/混合值?

return collapsed.length()>=min&&collapsed.length()在您的示例中,
setName()
应该是:

public void setName(final String name) {
    if (name == null) {
        this.name = null;
        return;
    }
    this.name = new CollapsedStringAdapter().unmarshal(name);
}
如上所述,您不必再使用
@CollapsedStringSize
@Size
足以进行验证


在JPA中,如果希望在JPA引擎将数据加载到实体对象后处理数据,可以尝试。

在您的示例中,
setName()
应该是:

public void setName(final String name) {
    if (name == null) {
        this.name = null;
        return;
    }
    this.name = new CollapsedStringAdapter().unmarshal(name);
}
如上所述,您不必再使用
@CollapsedStringSize
@Size
足以进行验证


在JPA中,如果您想在JPA引擎将数据加载到实体对象后处理数据,您可以尝试。

我可以问一下,为什么要在引擎验证时更改该值吗?能否描述有关您案例的更多信息?实际上,我最初关心的是将该值保持为有效形式(折叠/规范化)在封送到XML或持久化到DB之前对于自动输入数据,在数据被持久化到数据库之前可以使用setter。验证框架的主要用途是验证数据,它不能自动更正,而不会使您的业务逻辑代码复杂化。此外,验证框架允许您只在可测试单元编写验证逻辑。请问您想在引擎验证时更改值吗?能否描述有关您案例的更多信息?实际上,我最初关心的是在封送到XML或持久化到DB之前将值保持为有效形式(折叠/规范化)。如果您能找出“有效形式”对于自动输入数据,在将数据持久化到数据库之前可以使用setter。验证框架的主要用途是验证数据,这无法自动更正,而不会使您的业务逻辑代码复杂化。此外,验证框架允许您只在可测试单元编写验证逻辑。您是对的我甚至不需要<代码> null >代码>检查,因为也有<代码> @ NoTnLo/<代码>。这是真的吗?JPA/JSF可以通过反射或一些不存在现有的SETTER方法的方法直接将值从Db/FALE设置到字段吗?那么除了SETter之外,我应该考虑<代码> @后加载< /代码>吗?我不熟悉JSF。或者详细的信息你是对的。我甚至不要求<代码> null >代码>检查,因为也有<代码> @ NoTnLo./Cuth>。JPA/JSF是否可以通过反射或一些不存在现有的SETTER方法直接设置DB/FALE到字段的值?那么,除了SETTER之外,我是否应该考虑<代码> @后加载< /代码>?我不是FAMIL。对于JPA,请查看详细信息