2010-07-13 4 views
1

Tomahawk 또는 다른 libs없이 JSF 1.2 + Facelets + Apache My Faces를 사용하고 있습니다. 맞춤 컨테이너를 사용합니다. 구현할 시나리오가 있지만 JSF + Facelets를 사용하여 동일한 방법을 달성하는 방법을 잘 모르겠습니다. 이것들이 제 질문입니다 : 당신이 제공 할 수있는 도움을 주시면 감사하겠습니다. 감사!facelet의 조건을 기반으로 렌더링하는 방법은 무엇입니까?

시나리오 : 한 페이지 + 백킹 빈이 하나뿐입니다. 기본적으로 요청은 한 페이지에만 전송되므로 모든 사항이 정상입니다. 요청이 오면 백킹 빈의 일부 데이터를 기반으로 사용자가 페이지를 볼 수 있는지 여부를 결정합니다. 그럴 필요가 없다면 사용자를 다른 페이지 나 오류 페이지로 보내야합니다.

1) Facelets에서 템플릿을 사용해야합니까? 2) Facelets를 사용하여 if 및 else 조건을 달성하는 방법은 무엇입니까? 가능한가? 3) 정확히 맞습니까? - Backing Bean 생성자는 요청이 발생한 페이지로 항상 돌아갑니다. - 생성자가 "문자열"을 반환 할 수 없으므로 약간 혼란 스럽습니다. 4) 사용자를 다른 페이지로 보내려면 어떻게해야합니까? 또는 diff 페이지로 보낼 코드를 어디에 둘 것인지?

답변

2

뷰 측면에서는 수행하지 말고 컨트롤러 쪽에서 수행해야합니다. 정상적인 방법은 이것을 위해 Filter을 사용하는 것입니다.

if (request meets conditions) { 
    chain.doFilter(request, response); 
} else { 
    response.sendRedirect(errorPageURL); 
    // or response.sendError(statusCode, message); 
} 

당신은 다른 방법도 ExternalContext의 도움으로 빈의 생성자에서 리디렉션을 처리 할 수 ​​있지만, 정말이 맞는 곳이 아니다 : doFilter() 방법에 기본적으로 다음과 같은 (의사)를 수행 implements Filter 및 클래스를 만듭니다.

public Bean() { 
    if (request does not meet conditions) { 
     FacesContext.getCurrentInstance().getExternalContext().redirect(errorPageURL); 
     // Or externalContext.responseSendError(statusCode, message); 
    } 
} 
관련 문제