私はしばらくの間この問題に取り組んできました。とアクションに同じストライプActionBean
を使用したいと思います。ただし、現在のユーザーによるオブジェクトの所有権の信頼性の高いバインド、妥当性確認、および検証を可能にするクリーンな方法でこれを行う方法を理解できませんでした。show
update
たとえば、アクションBeanがをとるとしpostingId
ます。投稿はログインしているユーザーに属しています。次のようなものがあります。
@UrlBinding("/posting/{postingId}")
@RolesAllowed({ "USER" })
public class PostingActionBean extends BaseActionBean
ここで、show
アクションについて、次のように定義できます。
private int postingId; // assume the parameter in @UrlBinding above was renamed
private Posting posting;
そして今、@After(stages = LifecycleStage.BindingAndValidation)
をフェッチするために使用しPosting
ます。@After
この関数は、現在ログインしているユーザーが投稿を所有していることを確認できます。は事前にパラメータにバインドされていないため、@After
ではなく、を使用する必要があります。@Before
postingId
ただし、関数の場合、返されたフォームエントリが空のスタブではなく、既存のPostingオブジェクトの上に適用されるように、ではなく、を使用してオブジェクトをPosting変数update
にバインドする必要があります。Posting
@Before
@After
ここではカスタムTypeConverter<T>
が適切に機能しますが、セッションはTypeConverter
インターフェイスから利用できないため、バインド中にオブジェクトの所有権を検証することは困難です。
私が見ることができる唯一の解決策は、2つの別々のアクションBeanを使用することです。1つはshow用で、もう1つはupdate用です。ただし、これを行うと、またはタグを同じにマップし直す必要が<stripes:form>
あるため、タグとそのダウンストリームタグはフォームの値に正しく入力されません。beanclass
action
ActionBean
私が見る限り、Stripesモデルは、単純な(POJOなしの)パラメーターを操作する場合にのみ保持されます。それ以外の場合は、データストアからオブジェクトをバインドし、クライアントから送信された更新でオブジェクトを上書きするというキャッチ22に遭遇したようです。
私は何かが欠けている必要があります。経験豊富なStripesユーザーからのベストプラクティスは何ですか?