[Seasar-user:8462] s2jsf の postback および S2AnywhereValidator について

Masatoshi Hokino [E-MAIL ADDRESS DELETED]
2007年 6月 19日 (火) 16:12:20 JST


保木野と申します。

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 に置き換えたところ
正常に動作しました。

以上、よろしくお願いします。
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: s2jsf-test.zip
型:         application/x-zip-compressed
サイズ:     33740 バイト
説明:       無し
URL:        http://ml.seasar.org/archives/seasar-user/attachments/20070619/64be23bf/attachment-0001.bin 


Seasar-user メーリングリストの案内