[Seasar-user:8618] Re: s2jsf の postback および S2AnywhereValidator について
Masatoshi Hokino
[E-MAIL ADDRESS DELETED]
2007年 6月 25日 (月) 09:26:58 JST
保木野です。
S2AnywhereValidatorの実装の件、対応ありがとうございます。
次バージョンが出るまでは、下記のコードで対応したいと思います。
----- Original Message -----
From: "cero" <[E-MAIL ADDRESS DELETED]>
To: <[E-MAIL ADDRESS DELETED]>
Sent: Saturday, June 23, 2007 2:56 AM
Subject: [Seasar-user:8609] Re:s2jsf の postback および S2AnywhereValidator
について
> せろです。
>
> S2AnywhereValidatorの実装ですが、
> ご指摘の通り、sessionを使った際の挙動に問題がありました、
> すみません m(_ _)m
>
> 提案された方法でも動作すると思いますが、
> もう少しspecに近い実装をすると、こんな感じになります。
>
> ------------------------------------------------------------
> 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++)
> {
> if (targetComponents[i] instanceof UIInput)
> {
> UIInput input = (UIInput) targetComponents[i];
> Object submittedValue = input.getSubmittedValue();
>
> if (submittedValue != null)
> {
> targetValues[i] = RenderUtil.getConvertedValue(context,
> input, submittedValue);
> }
> else
> {
> targetValues[i] = input.getLocalValue();
> }
> }
> else
> {
> targetValues[i] = ValueHolderUtil.getValue(targetComponents[i]);
> }
> }
> doValidate(context, component, value, targetComponents, targetValues);
> }
> ------------------------------------------------------------
>
> この方法だと、
> convert処理が特殊な場合(一部のStringはnullと同等に扱うような変換)でも
> 対応できるので、良いかなと思います。
>
> 近日中にテストなどを行ない、コミットしておきます。
>
>
> ご指摘、ありがとうございました m(_ _)m
>
> それでは
>
>> -----Original Message-----
>> From: [E-MAIL ADDRESS DELETED]
>> [mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of
>> Masatoshi Hokino
>> Sent: Tuesday, June 19, 2007 4:12 PM
>> To: [E-MAIL ADDRESS DELETED]
>> Subject: [Seasar-user:8462]s2jsf の postback および S2AnywhereValidator
>> につ
>> いて
>>
>>
>> 保木野と申します。
>>
>> 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 に置き換えたと
>> ころ
>> 正常に動作しました。
>>
>> 以上、よろしくお願いします。
>>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
Seasar-user メーリングリストの案内