2012-10-10 5 views
4

나는 인덱스 페이지 (내 경우 index.xhtml)를 가지고있는 것이 좋습니다. 인덱스 페이지 (예 : struts의 경우 : <c:redirect url="list.do" /> 및 링크 및 버튼없이 struts 액션 클래스로 이동)에 대한 액션을 전달하려고합니다. 탐색을 사용하려면 commandLink-s 또는 버튼을 사용해야합니다. 나는 onclick 자바 스크립트 함수로 <h:commandButton>을 쓸 수 있지만 이것이 최선의 선택이라고 생각하지 않는다.JSF index.xhtml 및 리디렉션 faces 작업

저는 (JSF 2.0을 사용하는) JSF에 완전히 익숙하며 여러분의 조언이 필요합니다. 인덱스 페이지에서 컨트롤러의 작업으로 리디렉션하는 모범 사례는 무엇입니까?

/// 새 버전

당신의 index.xhtml 파일에서
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core"> 
<f:view> 
<ui:insert name="metadata"/> 
    <f:viewParam name="action" value="listItems.xtml"/> 
    <f:event type="preRenderView" listener="#{yourBean.methodInManagedBean}" /> 
<h:body></h:body> 
</f:view> 
</html> 

public class ForwardBean { 

    private String action; 

    // getter, setter 

    public void navigate(PhaseEvent event) { 
     FacesContext facesContext = FacesContext.getCurrentInstance(); 
     String outcome = action; 
     facesContext.getApplication().getNavigationHandler().handleNavigation(facesContext, null, outcome); 
    } 
} 
+0

을 사용할 수 있습니다 그것은 수정 후 작동합니까? – Swarne27

+0

왜 이럴 경우 이 필요합니까? – Swarne27

+0

내 솔루션에서 "list.do"부분을 제거하고 url "listItems.xtml"을 추가하고 Swarne27

답변

9

당신은 다음과 같은 방식으로 다른 페이지로 리디렉션 JSF preRenderView 이벤트를 사용할 수

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core"> 
<f:view> 
<ui:insert name="metadata"/> 
    <f:event type="preRenderView" listener="#{yourBean.methodInManagedBean}" /> 
<h:body></h:body> 
</f:view> 
</html> 

관리되는 bean에서 첫번째 방법은

public class yourClass{ 

    FacesContext fc = FacesContext.getCurrentInstance(); 
    ConfigurableNavigationHandler nav = (ConfigurableNavigationHandler)fc.getApplication().getNavigationHandler(); 

    public void methodInManagedBean() throws IOException { 
     nav.performNavigation("list.do");//add your URL here, instead of list.do 
    } 
    } 

또는 당신은 2 방식 때문에

public class yourClass{ 

    public void methodInManagedBean() throws IOException { 
     FacesContext.getCurrentInstance().getExternalContext().redirect("list.do");//add your URL here, instead of list.do 
    } 
    }