2012-08-26 39 views
0

我想在我的Web應用程序中進行身份驗證,當時在頁面上發生了一些操作。例如用戶點擊按鈕「添加到購物車」,如果他還沒有通過身份驗證,然後登錄頁面顯示。登錄後,它返回到previos頁面。 我可以在檢票中使用它來執行此操作嗎?執行自定義授權操作檢票

P.S.在產品頁面上,我還鏈接了「立即購買」,該頁面使用@AuthorizeInstantiation(「USER」)註釋導航到購買頁面。這個鏈接工作得很好。

我認爲MetaDataRoleAuthorizationStrategy可以用於「添加到購物車」上。但可用的操作僅限於ENABLE和RENDER。我可以將自己的Action添加到組件中,但是如何將Action與onClick()方法的組件相關聯?

---編輯---

不知道在哪裏寫,所以我編輯帖子。我嘗試克里斯托夫萊特的解決方案:

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); 
    } 
}); 

但之後我莫名其妙地點擊這個鏈接我看到更新cartPanel在Firefox 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> 

不明白它是如何通過例外...

回答

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))。

可能有更好的辦法比做「手動」,但這應該工作。

+0

謝謝!我以前沒有看過檢票的例外情況。現在我看到它是另一種控制執行流程的方式。 – cynepnaxa

+0

我試試這個,發生奇怪的結果。我把它添加到頭。 – cynepnaxa

+0

你可以試着用調試器來看看究竟發生了什麼嗎?如果拋出異常,我看不到這個代碼如何執行。 –

1

你還應該看看類SimplePageAuthorizationStrategy。這個類已經檢查用戶是否在他請求特定頁面類時進行了簽名,並且如果他沒有登錄,它會自動將他重定向到登錄頁面。
我也會使用PageParameters傳遞CartPage我們必須添加的產品的ID到購物車。通過這種方式,您可以避免將選定的產品存儲到會話中,並在用戶成功登錄後檢索它。

+0

謝謝!但我有cartPanel,它已經在我的頁面上實例化了。因此,如果用戶點擊「添加到購物車」,他已經通過身份驗證,那麼只需更新我的購物車標籤wia ajax。我可以在這種情況下使用策略嗎? – cynepnaxa

+0

不,我認爲你的購物車是在一個頁面中處理的,而不是在一個面板中處理的。 SimplePageAuthorizationStrategy只能使用頁面。 –