2012-08-26 4 views
0

페이지에서 일부 작업이 발생하면 웹 응용 프로그램에서 인증을 수행하려고합니다. 예를 들어 사용자가 "장바구니에 추가"버튼을 클릭하고 아직 인증되지 않은 경우 로그인 페이지가 표시됩니다. signIn 후 previos 페이지로 돌아갑니다. 이것을 구현하기 위해 wicket에서 사용할 수있는 것은 무엇입니까?사용자 지정 승인 조치 위킷 구현

P. 제품 페이지에는 @AuthorizeInstantiation ("USER") 주석이 포함 된 Buy 페이지로 이동하는 "지금 구입"링크가 있습니다. 이 링크는 잘 작동합니다.

"장바구니에 추가"에서 같은 것을 만들기 위해 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와 아약스 응답을 참조하십시오. 나는 authroles 모듈과 전문가가 아니에요, 그래서 잘 모르겠어요 ...

<?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

을 : 나는 소스 코드와 함께 나에게 페이지를 표시 의미 원하는 것을 성취하기 위해 다른 액션을 추가 할 수 있는지 여부 사용자가 성공적으로 인증되면 장바구니에 추가해야 세션에서 제품이 있는지 당신이 확인해야합니다 귀하의 LoginPage/Session에서

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

: 난 그냥 그런 일을 사용합니다. 그런 다음 continueToOriginalDestination으로 전화하여 Wicket이 이전 페이지 (또는 setResponsePage(CartPage.class))를 표시합니다.

"수동으로"하는 것보다 더 좋은 방법이있을 수 있지만 이것이 효과가 있습니다.

+0

감사합니다! 전에 개찰을 들여다 보지 않습니다. 이제 실행 흐름을 제어하는 ​​또 다른 방법이라고 생각합니다. – cynepnaxa

+0

나는 이것을 시도하고 이상한 결과가 발생한다. 나는 그것을 머리에 더한다. – cynepnaxa

+0

정확히 무슨 일이 벌어지고 있는지보기 위해 디버거를 단계별로 시도해 볼 수 있습니까? 예외가 발생하면이 코드가 어떻게 실행되는지 알 수 없습니다. –

1

또한 SimplePageAuthorizationStrategy 클래스를 살펴보아야합니다. 이 클래스는 사용자가 특정 페이지 클래스를 요청할 때 서명했는지 여부를 확인하고 로그인하지 않은 경우 자동으로 로그인 페이지로 리디렉션합니다.
PageParameters를 사용하여 추가해야하는 제품의 ID를 CartPage에 전달합니다. 카트에. 이렇게하면 사용자가 성공적으로 로그인 한 후 선택한 제품을 세션에 저장하고 검색 할 필요가 없습니다.

+0

고마워요! 하지만 cartPanel이 있는데 이미 내 페이지에 인스턴스화되어 있습니다. 따라서 사용자가 "장바구니에 추가"를 클릭하고 이미 인증을받은 경우 내 장바구니 레이블이 wia ajax를 업데이트합니다. 이 경우 전략을 사용할 수 있습니까? – cynepnaxa

+0

아니요, 장바구니가 페이지가 아닌 패널에서 처리 된 것 같습니다. SimplePageAuthorizationStrategy는 페이지에서만 작동합니다. –

관련 문제