ビジネス検証後、私はUIInputを無効に設定して、赤色になり、何が間違っているかをユーザーに伝えます。ここに私のコードは次のとおりです。JSF/PrimeFacesのプログラムで無効化された入力クリア値
<p:outputLabel value="Label" for="input"/>
<p:inputText id="input" value="#{bean.selectedEntity.input}"/>
<p:commandButton value="#{msg['button.save']}"
icon="ui-icon-check"
action="#{bean.save()}"
update=":form, :growl"
oncomplete="if (args && !args.validationFailed) PF('detailDlg').hide();"
/>
// bean code
UIInput c = (UIInput) context.getViewRoot().findComponent("form:input");
c.setValid(false);
コンポーネントは、赤取得しますが、テキストもクリアされます。私はちょっとした回避策を使って動作させることができます:
Object value = c.getValue();
c.setValid(false);
c.setValue(value);
これはバグですか?
ENV:あなたの要件がすでにJSFで覆われているPrimeFaces 6.1、JSFクロサギ科2.2.14、Javaの8、春ブーツ1.5.4
通常のJSFバリデータを使用してみませんか? findComponent()、setValid()などで手作業をする必要はもうありません。 – BalusC
サービスレイヤの保存フェーズ中に検証が行われます。これは、2つの他のソースからデータをインポートすることもできるためです。私は問題のあるフィールドで "BusinessValidationException"をキャッチすることができます... – Michal