ページで何らかのアクションが発生したときに、Webアプリで認証を行いたい。たとえば、ユーザーが[カートに追加]ボタンをクリックし、まだ認証されていない場合は、サインインページが表示されます。サインイン後、前のページに戻ります。これを実装するためにウィケットで何を使用できますか?
PS製品ページには、「今すぐ購入」というリンクもあります。これは、@ AuthorizeInstantiation( "USER")アノテーションが付いた購入ページに移動します。このリンクは問題なく機能します。
MetaDataRoleAuthorizationStrategyを使用して、「カートに追加」で同じことを行うことができると思います。ただし、使用可能なアクションはENABLEおよびRENDERのみです。独自のアクションをコンポーネントに追加できますが、アクションをコンポーネントのonClick()メソッドに関連付けるにはどうすればよいですか?
---編集---
どこに書けばいいのかわからないので、投稿を編集します。ChristophLeiterのソリューションを試してみます。
add(link = new AjaxFallbackLink("add2cart") {
@Override
public void onClick(AjaxRequestTarget target) {
if (!CynephoneSession.get().isSignedIn()) {
throw new RestartResponseAtInterceptPageException(SignIn.class);
}
user.addItem(item.copy());
target.add(cartPanel);
}
});
しかし、どういうわけかこのリンクをクリックした後、Firefoxで更新されたcartPanelでajax応答が表示されます。つまり、ソースコードを含むページが表示されます。
<?xml version="1.0" encoding="UTF-8"?><ajax-response><component id="cart2" ><![CDATA[<div class="cart" wicket:id="cart" id="cart2">
<span wicket:id="total">11 800</span> <img src="./resource/top.Top/img/rouble-ver-1346040298957.gif"/><br/>
<img src="./resource/top.Top/img/good-ver-1346040298926.gif"/>х<span wicket:id="quantity">2</span>
</div>]]></component></ajax-response>
それがどのように例外を通過するのか理解できません...