我有一个网址:example.com/mypage如何根据mypage值创建jsf页面?是否有可能从FaceletsContext中获取它?
只有通过创建过滤器和解析uri才能做到这一点,但它一定是非常错误的:
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
String uri = request.getRequestURI();
if (uri == null || uri.length() == 0 || uri.equals("/") || !uri.contains("/") || uri.contains("xhtml")) {
chain.doFilter(request, response);
return;
}
List<String> parts = new ArrayList<String>(Arrays.asList(uri.split("/")));
parts.remove("");
if (parts.size() != 1) {
chain.doFilter(request, response);
return;
}
forwardTo(request, response, "page.xhtml?value=" + parts.get(0));
}
答案 0 :(得分:0)
由于您使用的是JSF 2,我建议您使用URL重写框架(如PrettyFaces)或工具将所有HTTP请求从example.com/mypage
映射到example.com/page.xhtml?page=mypage
。< / p>
您首次尝试使用ServletFilter
可以通过此类框架完成。
只要将页面作为查询参数提供给您,就可以使用JSF2 viewParam
functionality将其映射到托管bean值:
<f:metadata>
<f:viewParam name="page" value="#{someBean.page}" />
</f:metadata>