使用JSF时,可以选择以下几种扩展名:
至少推荐最后一个用于JSF 2.2。
但是,如果我想使用.jsf
扩展名,那么我在这里遇到的问题是,如果有人要输出好奇心" .xhtml
如果您将JSF标记与普通HTML标记混合,那么奇怪的东西就会开始发生。
所以我知道,如果我输入.jsf
,GlassFish服务器的管理控制台会强制将网址重写为.xhtml
,我该怎么做?
答案 0 :(得分:1)
两种方式:
只需限制.xhtml
中对web.xml
文件的直接访问即可。
<security-constraint>
<display-name>Restrict direct access to XHTML files</display-name>
<web-resource-collection>
<web-resource-name>XHTML files</web-resource-name>
<url-pattern>*.xhtml</url-pattern>
</web-resource-collection>
<auth-constraint />
</security-constraint>
另见JSF returns blank/unparsed page with plain/raw XHTML/XML/EL source instead of rendered HTML output。
创建一个servlet filter来监听*.xhtml
并重定向到*.jsf
。
@WebFilter("*.xhtml")
public class FacesUrlRewriteFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String redirectURI = request.getRequestURI().replaceAll("xhtml$", "jsf");
String queryString = request.getQueryString();
if (queryString != null) {
redirectURI += "?" + queryString;
}
response.sendRedirect(redirectURI);
}
// ...
}
另见How to use a servlet filter in Java to change an incoming servlet request url?