我有一个JavaWeb7项目,在该项目中,我希望在每个p:ajax
事件上,直接在支持bean中管理的实体实例上编写JSF组件值。只要添加一个JSR303验证约束,就可以很好地工作,比如在实体属性之一上添加@size(min=5)
。只要违反约束,就不再在具有约束的属性上设置值。没有根据NetBeans调试器调用setter;另一个属性工作很好,这使我相信我已经隔离了问题。我想在我想要的时候执行验证,因此,如果我想要的话,可以设置无效的值。如何做到这一点?
在我的最小可复制示例中,我有实体myEntity
(JPA和JSR303注释)
@Entity public class MyEntity implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue private Long id; @Size(min = 5) private String property1; private String property2; public MyEntity() { } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getProperty1() { return property1; } public void setProperty1(String property1) { this.property1 = property1; } public String getProperty2() { return property2; } public void setProperty2(String property2) { this.property2 = property2; } }
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form>
<p:inputText value="#{myManagedBean.myEntity.property1}">
<p:ajax/>
</p:inputText>
<p:inputTextarea value="#{myManagedBean.myEntity.property2}">
<p:ajax/>
</p:inputTextarea>
<p:commandButton value="Save">
<p:ajax listener="#{myManagedBean.onSaveButtonClicked}"/>
</p:commandButton>
</h:form>
</h:body>
</html>
和一个支持豆
@ManagedBean @SessionScoped public class MyManagedBean { private String value; private String textAreaValue; private MyEntity myEntity = new MyEntity(); public MyManagedBean() { } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public String getTextAreaValue() { return textAreaValue; } public MyEntity getMyEntity() { return myEntity; } public void setMyEntity(MyEntity myEntity) { this.myEntity = myEntity; } public void setTextAreaValue(String textAreaValue) { this.textAreaValue = textAreaValue; } public void onSaveButtonClicked(AjaxBehaviorEvent event) { System.out.println("value: "+value); System.out.println("textAreaValue: "+textAreaValue); System.out.println("myEntity: "+myEntity); } }
这个示例可以在https://github.com/krichter722/jsf-skip-entity-validation上找到。我用的是Primefaces 6.0。
它正在按照它应该的工作方式工作。如果验证失败,则不应调用setter。如果需要,可以使用以下命令禁用bean验证:
<f:validateBean disabled="true"/>
我正在使用JSR303的HibernateValidator实现来验证程序中的一些实体,我需要记录不正确的数据。我可以拥有JSR303验证结果的ConstraintViolation列表,但它只包含失败验证的元数据。有问题的值本身在任何地方都不可用,我无法记录它们(我必须将违反约束的情况映射回实体,这很糟糕)。 我在Hibernate的ConstraintTree类中发现了一个跟踪日志,它记录了所
我有一个迁移脚本之间的2个不同的模式数据库。脚本做了3件事:1。禁用约束2。将记录从旧架构插入到新架构3。启用约束 我发现这两个约束在旧的模式中是不存在的。这2个表的表结构定义有什么问题吗?
JSR303Bean验证包含一些现成的约束,但也允许定义自定义约束。 我有一种感觉,对于许多没有随JSR实现一起提供的项目来说,有很多共同的约束。 日期范围 密码复杂性检查 等于交叉字段验证(堆栈溢出投票最高的'bean验证'问题) ... 所以我的问题是:是否有一个(值得信赖的)库包含commons jsr 303(Bean验证)约束?
我正试图为bean验证编写一个jUnit测试。我阅读了如何使用JUnit测试类的验证注释?并编写了如下的测试代码。 我的环境: Sprint Boot 2.2.6 Java11 断言J 3.15.0 目标Bean类: JUnit测试代码: 我想检查违反了哪些约束。现在,我检查违规信息。有更好的方法吗?
我使用的是Hibernate Validator5.x和javax Validation1.x(由于一些原因,无法升级)。这个场景可以在hibernate Validator6.x和Validation2.x中工作 在违反约束时,Validator会启动并显示正确的错误响应,但同时它会执行REST方法体。 我搜索了官方文件,但没有帮助。
我有一个笑话模型: 现在,当我试图迁移最后一行时,我得到了错误。基本上,我想将一个用户链接到Joke对象,因为我已经有了一个数据库,所以我希望默认值为1,这是管理员用户的id(我检查过了...).Makemigrations工作正常,但是当我尝试迁移时,我得到了这个: 我真的不明白怎么了。有什么想法吗?