1

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

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

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

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

4

1 回答 1

1

在最简单的情况下,您可以创建一个过滤器,该过滤器映射到一个 URL 模式/country/*并将所有请求转发到单个 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);
    }

    // ...
}

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

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

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

对于进一步的抽象和更细粒度的配置,您可能需要查看PrettyFaces,它在幕后的深度基本相同。

于 2012-04-23T16:47:21.197 回答