2012-07-06 161 views
3

我們有一個在weblogic-10.3.4中部署的JSF2.0應用程序,我們有要求給用戶通用的URL,例如(http:// web/apply?7777)。當用戶訪問此頁面時,根據查詢字符串值,用戶將被重定向到客戶端特定頁面,該頁面可以是10個不同頁面中的一個。JSF頁面重定向

所以一種方法是有一個apply.jsf頁面,這已經得到了預渲染事件,這將重新直接用戶根據查詢字符串不同的頁面,

是否有其他更好的方法?不要有apply.xhtml。

注意:在web.xml中,我們定義了pageNotFound.xhtml以防萬一找不到頁面。

回答

1

你可以使用一個簡單的servlet filter這個。

@WebFilter("/apply") 
public class ApplyFilter implements Filter { 

    @Override 
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
     HttpServletRequest request = (HttpServletRequest) req; 
     HttpServletResponse response = (HttpServletResponse) res; 

     String queryString = request.getQueryString(); 
     String redirectURL = determineItBasedOnQueryString(queryString); 

     if (redirectURL != null) { 
      response.sendRedirect(redirectURL); 
     } else { 
      response.sendError(HttpServletResponse.SC_NOT_FOUND); 
     } 
    } 

    // ... 
} 
+0

您的輸入[這個問題](http://stackoverflow.com/questions/11373665/how-to-get-bean-data-in-jsp),請 – 2012-07-07 09:13:39

+0

如何訪問值fromManaged Beans from Faces Context來確定servlet過濾器中的重定向url? – user684434 2012-07-10 18:57:20

+0

'FacesContext'在濾鏡中根本不可用。只需將他們的低級Servlet API方式作爲所需範圍的屬性來獲取即可。另請參閱http://stackoverflow.com/questions/2633112/jsf-get-managed-bean-by-name/2633733#2633733因此,SessionBean sessionBean =(SessionBean)請求將提供會話作用域JSF託管bean。 。的getSession()的getAttribute( 「一個sessionBean」);'。 – BalusC 2012-07-10 19:05:21