Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于url中的路径呈现jsf页面_Jsf_Jsf 2 - Fatal编程技术网

基于url中的路径呈现jsf页面

基于url中的路径呈现jsf页面,jsf,jsf-2,Jsf,Jsf 2,我有一个url:example.com/mypage如何根据mypage值创建jsf页面?是否有可能从FaceletsContext获得它 唯一的方法是创建一个过滤器并解析uri,但这肯定是非常错误的: protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {

我有一个url: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));
}
受保护的void doFilterInternal(HttpServletRequest请求、HttpServletResponse响应、FilterChain链)抛出ServletException、IOException{
字符串uri=request.getRequestURI();
如果(uri==null | | | uri.length()==0 | | uri.equals(“/”)| | uri.contains(“/”)| | uri.contains(“xhtml”)){
链式过滤器(请求、响应);
回来
}
List parts=newarraylist(Arrays.asList(uri.split(“/”));
部分。删除(“”);
如果(parts.size()!=1){
链式过滤器(请求、响应);
回来
}
forwardTo(请求、响应,“page.xhtml?value=“+parts.get(0));
}

由于您使用的是JSF2,我建议您使用URL重写框架(like)或工具将所有HTTP请求从
example.com/mypage
映射到
example.com/page.xhtml?page=mypage

您第一次尝试使用
ServletFilter
所做的事情可以通过这样一个框架来完成

一旦页面作为查询参数提供给您,您就可以使用以下命令将其映射到托管bean值:



好吧,你必须使用一个过滤器。我想你可以看看你的url重写你使用的是什么版本的JSF?哦,我忘了提到-2.0你的意思是,你想要无扩展的url?如果是这样,OmniFacesView可能会有所帮助。这个问题就是一个骗局:
<f:metadata>
  <f:viewParam name="page" value="#{someBean.page}" />
</f:metadata>