私は、すべてのp:ajax
イベントでバッキングBeanで管理されるエンティティインスタンスにJSFコンポーネント値を直接書きたいJava Web 7プロジェクトを持っています。エンティティプロパティの1つに@Size(min=5)
のようなJSR 303の検証制約を追加していれば問題ありません。制約が違反されている限り、その値は制約付きのプロパティで設定されなくなります。 NetBeansデバッガに従ってsetterが呼び出されません。他の不動産はうまく働いて、私が問題を切り離したと信じさせてくれます。私が欲しいと思ったら検証を行い、私が望むなら無効な値セットを取得したいと思います。それを達成するには?JSR 303の検証制約に違反している場合、p:inputTextの値をp:ajaxで設定する方法を教えてください。
MyEntity
(JPAとJSR 303注釈)を持っている私の最小限の再現性のある例では
@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; } }
JSFページ
<?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>
とバッキングBean
@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を使用しています。
Hm、多分p:ajaxにイベントを追加すると、ドキュメントによると、デフォルトは "親ClientBehaviorHolderコンポーネントによって定義されていますが、その動作は"、どんなものであれ... ...でも、実際に検証注釈を追加すると、このデフォルトの変更が行われると思います。多分。 (とにかく誰もがjsfライフサイクルを理解していない)。 – slowy
その後、私の名前はnobody – Kukeltje
[JSF 2.0:JSR-303 bean検証をスキップする方法は?](http://stackoverflow.com/questions/4852496/jsf-2-0-how-to-skip-jsr -303-bean-validation) – Kukeltje