コンポーネントは、バッキングBeanプロパティへの値バインディングによって配線されています。私は値が変更されている事実であることを確認することができますが、レンダリングフェーズの間に新しい値が何とか古いで上書きされるデバッグ中の検証方法ではバッキングBeanの変更値がUIに反映されない
<h:inputText id="number" value="#{backingBean.number}" validator="#{backingBean.validateNumber}" />
数値は
public void validateNumber(FacesContext facesContext, UIComponent component, Object value) {
String inputValue = (String) value;
if (inputValue.length() == 9) {
inputValue = "0" + inputValue;
((UIInput) component).setSubmittedValue(inputValue);
((UIInput) component).setValue(inputValue);
setNumber(inputValue);
}
}
を変更されました値。 これはJSFのライフサイクルを誤解していると私は何か関係がありますが、実際のコンポーネントにフックを持っているため、UIのコンポーネントにバインドされているプロパティの値を変更しています。コンポーネントの値とsubmittedValueを変更して(問題を見つけるために)、変更はまだUIに反映されません。
ファクトは、最初のいくつかの検証が発生することで、最後に検証がOKであればその数は9桁の数字の代わりに10の私が余分な検証を残し大手0を含むように編集する必要があります簡潔にするために、バリデータメソッドでこの値を編集することは全くできませんか?このためにバリデータメソッドとは別にコンバータを用意する必要がありますか?私はこれがよりクリーンであると理解していますが、jsfライフサイクルでこれを行うことが技術的に可能かどうかを知りたいのですが? – nkr1pt
いいえ、回答の更新を参照してください。 – BalusC