0

ページで何らかのアクションが発生したときに、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>

それがどのように例外を通過するのか理解できません...

4

2 に答える 2

3

私はauthrolesモジュールの専門家ではないので、目的を達成するために別のアクションを追加できるかどうかわかりません。私はそのようなものを使用します:

new AjaxLink<Product>("addToCart", product) {
    @Override
    public void onClick(AjaxRequestTarget target) {
        if (!AbstractAuthenticatedWebSession.get().isSignedIn()) {
            // code to remember product to add to cart in session
            throw new RestartResponseAtInterceptPageException(LoginPage.class);
        }
        // continue normally
    }
};

LoginPage/Sessionで、ユーザーが正常に認証されたときにカートに追加する必要のある製品がセッションにあるかどうかを確認する必要があります。次にcontinueToOriginalDestination、Wicketが前のページ(またはsetResponsePage(CartPage.class))を表示するように呼び出します。

これを「手動で」行うよりも良い方法があるかもしれませんが、これは機能するはずです。

于 2012-08-26T15:03:07.037 に答える
1

SimplePageAuthorizationStrategyクラスも確認する必要があります。このクラスは、ユーザーが特定のページクラスを要求したときにユーザーが署名されているかどうかを既に確認し、ユーザーがログインしていない場合は自動的にログインページにリダイレクトします。
また、PageParametersを使用して、追加する必要のある製品のIDをCartPageに渡します。カート。このようにして、選択した製品をセッションに保存し、ユーザーが正常にサインインした後にそれを取得することを回避できます。

于 2012-08-26T17:57:58.523 に答える