如何将html5与JSF2和facelets结合使用?

如何将html5与JSF2和facelets结合使用?,html,jsf,jsf-2,facelets,Html,Jsf,Jsf 2,Facelets,我正试图在Glassfish 3.1.2服务器上将HTML5 doctype与jsf 2.1和Facelets结合使用 我看到很多地方我们可以用html5 doctype替换xhtml doctype <!DOCTYPE html> 好吧,这看起来不太有希望。在web.xml中,我将项目阶段从开发更改为生产 <context-param> <param-name>javax.faces.PROJECT_STAGE</param-name&

我正试图在Glassfish 3.1.2服务器上将HTML5 doctype与jsf 2.1和Facelets结合使用

我看到很多地方我们可以用html5 doctype替换xhtml doctype

 <!DOCTYPE html>
好吧,这看起来不太有希望。在web.xml中,我将项目阶段从开发更改为生产

 <context-param>
     <param-name>javax.faces.PROJECT_STAGE</param-name>
     <param-value>Production</param-value>
 </context-param>

javax.faces.PROJECT_阶段
生产
警告消失了,w3c的验证程序说这是有效的html5

有谁有更好的解决办法吗?jsf/facelets是否要求文件具有扩展名xhtml

警告:此页调用以前缀(…)声明的XML命名空间,但该命名空间不存在标记库

您需要将定义HTML元素的XML命名空间声明为全局XML命名空间

就是

<html xmlns="http://www.w3.org/1999/xhtml">

在我的例子中,添加名称空间不是一个好的解决方案:

<html xmlns="http://www.w3.org/1999/xhtml">
工厂:

public class Html5FacesContextFactory extends FacesContextFactory {

    private FacesContextFactory delegate;

    public Html5FacesContextFactory(FacesContextFactory facesContextFactory) {
      delegate = facesContextFactory;
    }

    @Override
    public FacesContext getFacesContext(Object context, Object request, Object response, Lifecycle lifecycle) throws FacesException {
        return new Html5FacesContextImpl(delegate.getFacesContext(context, request, response, lifecycle));
    }

}
faces config.xml

<factory>
    <faces-context-factory>ca.gc.agr.common.web.jsf.context.Html5FacesContextFactory</faces-context-factory>
</factory>

ca.gc.agr.common.web.jsf.context.Html5FacesContextFactory

这似乎有效。

如果为xhtml添加xml名称空间,它真的是html5吗?如果你阅读了我的问题,你会发现我已经尝试了你提出的解决方案,但是Firefox将页面呈现为“HTML专有”而不是HTML5。再次尝试为xhtml添加xmlns,现在Firefox和W3C都表示有效的HTML5。你做了什么无论如何,根据这一点,html5总是在xhtml名称空间中,因此没有必要使用。“但是HTML5中的元素总是在这个名称空间中,所以你不再需要显式地声明它。你的HTML5页面在所有浏览器中的工作方式都是完全相同的,不管这个属性是否存在。”facelets总是必须将*.xhtml作为文件扩展名..?这是为了让facelets的XML解析器满意。不过,你可以随意忽略这些警告。
<html xmlns="http://www.w3.org/1999/xhtml">
public class Html5FacesContextImpl extends FacesContextWrapper {

    private final FacesContext wrapped;

    public Html5FacesContextImpl(FacesContext wrapped) {
        this.wrapped = wrapped;
    }

    @Override
    public FacesContext getWrapped() {
        return wrapped;
    }


    private final static String XML_NAMESPACE_MSG_FILTER = "Warning: This page calls for XML namespace";

    @Override
    public void addMessage(String clientId, FacesMessage message) {
        if ( !message.getSummary().startsWith(XML_NAMESPACE_MSG_FILTER) ) {
            wrapped.addMessage(clientId, message);
        }
    }


}
public class Html5FacesContextFactory extends FacesContextFactory {

    private FacesContextFactory delegate;

    public Html5FacesContextFactory(FacesContextFactory facesContextFactory) {
      delegate = facesContextFactory;
    }

    @Override
    public FacesContext getFacesContext(Object context, Object request, Object response, Lifecycle lifecycle) throws FacesException {
        return new Html5FacesContextImpl(delegate.getFacesContext(context, request, response, lifecycle));
    }

}
<factory>
    <faces-context-factory>ca.gc.agr.common.web.jsf.context.Html5FacesContextFactory</faces-context-factory>
</factory>