使用JSF 2.0进行GET请求和动态页面创建的URL依赖处理

时间:2012-04-23 11:33:29

标签: model-view-controller jsf url-rewriting get

我刚刚开始深入研究JSF 2.0及其以组件为中心的架构,其中包含一组固定的视图,用于构建具有丰富用户界面的Web应用程序。但是,JSF 2.0是否也应该用于动态页面创建和许多页面的网站?一个例子:

我有一个不完整的国家数据库和有关这些国家不同年份的统计数据。这组国家和可用的统计数据每天都在变化。我想提供以下网址:

为每个国家/地区创建一个视图是没有意义的,例如: WEB-INF / pages / country / germany.xhtml或/country/germany.xhtml。我认为我真的需要基于给定URL的密集处理来创建动态页面。但JSF 2.0是否为这种用例构建?

我真的在考虑使用像Velocity这样的模板引擎来切换到普通的旧Servlet。我对JSF 2.0的了解非常有限,我不知道是否应该使用它。

1 个答案:

答案 0 :(得分:1)

最简单的方法是,您可以创建filter映射到/country/*的URL模式,并将所有请求转发到单个JSF视图。

@WebFilter("/country/*")
public class CountryFilter implements Filter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        req.getRequestDispatcher("/WEB-INF/country.xhtml").forward(req, res);
    }

    // ...
}

在与country.xhtml关联的托管bean的(post)构造函数中,您可以按如下方式获取原始请求URI:

String originalUri = (String) externalContext.getRequestMap().get(RequestDispatcher.FORWARD_REQUEST_URI);
// ...

您可以在bean / view中进一步使用它来动态预填充/呈现所需的HTML输出。

对于进一步的抽象和更细粒度的配置,您可能需要查看PrettyFaces,其内涵基本相同。