当页面上发生某些操作时,我想在我的网络应用程序中进行身份验证。例如,用户单击“添加到购物车”按钮,如果他尚未通过身份验证,则会显示登录页面。登录后返回到上一页。我可以在检票口中使用什么来实现这一点?
PS 在产品页面上,我还链接了“立即购买”,它导航到带有 @AuthorizeInstantiation("USER") 注释的购买页面。这个链接工作得很好。
我认为 MetaDataRoleAuthorizationStrategy 可以用来在“添加到购物车”上做同样的事情。但可用的操作只有 ENABLE 和 RENDER。我可以将自己的 Action 添加到组件中,但是如何将 Action 与组件的 onClick() 方法相关联?
---已编辑---
不知道在哪里写,所以我编辑了帖子。我尝试了 Christoph Leiter 的解决方案:
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>
不明白它是如何通过异常...