[Seasar-user:8463] Re: s2jsf の postback および S2AnywhereValidator について
[E-MAIL ADDRESS DELETED]
[E-MAIL ADDRESS DELETED]
2007年 6月 19日 (火) 16:31:06 JST
米林です。
----- Original Message -----
From: "Masatoshi Hokino" <[E-MAIL ADDRESS DELETED]>
Sent: Tuesday, June 19, 2007 4:12 PM
> 保木野と申します。
>
> s2jsf 1.0.x のシステムを s2jsf 1.1.2 に以降しているのですが、
> 2つ質問があります。
>
> まず、postbackの動作についてですが、
> faces-config.xml で redirect を設定していないページでは、
> postback が正常に動作しないように見えます。
> redirect を設定していない場合は、1回目の表示から true が返ってきてしまいま
す。
>
> s2jsf1.0.xでは、ちゃんとfalseが返ってきたと思うんですが、これは仕様でしょうか
?
こちらにつきましてコミッタ間で確認します。
> 2つ目は、S2AnywhereValidator についてです。
> Dtoのスコープが session のときに S2AnywhereValidator を継承した Validator が
> 正しく動作しないようです。
>
> s2jsf-exampleに含まれるAnywareCalenderValidatorを使った再現サンプルを作成しま
した。
> 添付のファイルに、s2-jsf-example-1.1.2.zipに含まれているjarをコピーしてくださ
い。
>
> 再現手順は、
> 1) page1.html で正常な値を入力し、nextボタンで次ページへ移る
> 2) page2.html から prevボタンで戻る
> 3) page1.html で不正な値を入力し、 nextボタンを押す
> 3のときにバリデーションエラーが出るはずだが、
> このケースではバリデーションエラーとならずに次ページへ行ってしまう。
>
> これを回避するために、S2AnywhereValidatorのvalidateメソッドを次のように書き換
えました。
>
> public void validate(FacesContext context, UIComponent component,
> Object value) throws ValidatorException {
>
> if (value == null) {
> return;
> }
>
> UIComponent[] targetComponents = getTargetComponents(component);
> Object[] targetValues = new Object[targetComponents.length];
> for (int i = 0; i < targetComponents.length; i++) {
> targetValues[i] = null;
> if (targetComponents[i] instanceof UIInput) {
> UIInput input = (UIInput) targetComponents[i];
> Object submittedValue = input.getSubmittedValue();
> targetValues[i] = RenderUtil.getConvertedValue(context, input,
> submittedValue);
> }
> if (targetValues[i] == null) {
> targetValues[i] = ValueHolderUtil.getValue(targetComponents[i]);
> }
> }
> doValidate(context, component, value, targetComponents, targetValues);
> }
>
> 再現サンプル含めたexamples.jsf.validator.TestAnywareValidatorというクラスで
> 試してみましたが、意図したとおりに動いているように見えます。
> 対応方法としてあっていますでしょうか?
こちらにつきましてもコミッタ間で相談してみます。
> 最後にこれはご報告になりますが、
> s2-jsf-blank-1.1.2.zip からプロジェクトを作成したところ
> java.lang.NoClassDefFoundError:
> javax/transaction/TransactionSynchronizationRegistry
> となりました。
> s2-jsf-blank-1.1.2.zip に含まれている geronimo-jta_1.0.1B_spec-1.0.jar を
> s2-jsf-example-1.1.2.zip に含まれている geronimo-jta_1.1_spec-1.0.jar に置き換
えたところ
> 正常に動作しました。
これは私のミスです。
ご指摘ありがとうございます。
取り急ぎ。
---
米林 正明
[E-MAIL ADDRESS DELETED]
Seasar-user メーリングリストの案内