2012-07-06 166 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