我刚刚开始深入研究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的了解非常有限,我不知道是否应该使用它。
答案 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,其内涵基本相同。