0

Consider following scenario. Have a page with some persistent object obj:

public class SomePage {
   @Persistent
   @Property
   SomeBean obj;

   @Property
   @PageActivationContext
   private SomeActivation actObj;

   ...

   void onValidateFromForm() { ... }
}

This obj is edited on a page:

<t:textfield t:id="value" t:value="obj.value"/>

Lets consider initialization procedure of obj state like this:

(*) obj.value = actObj.value;

(I strongly need to unbind value from actObj, please don't ask why).

Have also a validation method. When validation fails, I'd like to show errors list on page and keep also all values, which user filled on form and which were stored into obj.

So:

  1. when page firstly initialized with specific actObj I'd like to initialize obj
  2. when page validation fails, I don't want to reinitialize obj, because I want to keep its values and show them user with errors list.

The question is: where I should place initialization block (*) ?

4

2 に答える 2

0

これは、リクエスト パラメータが適用される前に発生するため、onActivate() を使用できるはずです。したがって、送信イベントは、最初にアクティブ化コンテキストから値を設定し、次にテキスト フィールドからの値で上書きします。

タペストリーは、検証が成功した場合にのみ投稿後にリダイレクトを行うことに注意してください。検証が失敗すると、tapestry は POST 応答でエラーをレンダリングします。このため、 @Persist がまったく必要なく、 @PageActivationContext / onActivate() / onPassivate() を介してステートレスにできることに気付くかもしれません。

于 2013-07-12T13:45:18.420 に答える