Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java XHTML对Thymeleaf的基本支持?_Java_Spring_Thymeleaf - Fatal编程技术网

Java XHTML对Thymeleaf的基本支持?

Java XHTML对Thymeleaf的基本支持?,java,spring,thymeleaf,Java,Spring,Thymeleaf,我试图让Spring 4.1.9和Thymeleaf 2.1.5呈现XHTML Basic 1.1页面,其序言如下: 在模板中简单地使用它是行不通的,因为Thymeleaf无法识别doctype org.thymeleaf.exceptions.TemplateProcessingException:请求的实体的PUBLICID为“-//W3C//DTD XHTML Basic 1.1//EN”和SYSTEMID为“”,不受支持。确保您提供了相应的org.thymeleaf.doctype.

我试图让Spring 4.1.9和Thymeleaf 2.1.5呈现XHTML Basic 1.1页面,其序言如下:


在模板中简单地使用它是行不通的,因为Thymeleaf无法识别doctype

org.thymeleaf.exceptions.TemplateProcessingException:请求的实体的PUBLICID为“-//W3C//DTD XHTML Basic 1.1//EN”和SYSTEMID为“”,不受支持。确保您提供了相应的org.thymeleaf.doctype.resolution.IDocTypeResolutionEntry实现(索引:1)


安装程序 我浏览了Thymeleaf,并以此为起点,定义了一种从SpringStandard方言继承而来的新方言。我通过反复试验找出了缺失的模块,从w3.org下载并将其添加到我的项目的参考资料目录中:

XhtmlBasicDialect.java
import java.util.LinkedHashSet;
导入java.util.Set;
导入org.thymeleaf.doctype.DocTypeIdentifier;
导入org.thymeleaf.doctype.resolution.ClassLoaderDocTypeResolutionEntry;
导入org.thymeleaf.doctype.resolution.IDocTypeResolutionEntry;
导入org.thymeleaf.spring4.dialogue.springStandardDialogue;
公共类XhtmlBasicDialect扩展了SpringStandardDialect{
私有静态最终字符串DTD_STANDARD_PATH=“org/thymeleaf/DTD/STANDARD/”;
私有静态最终DocTypeIdentifier XHTML_BASIC_11_PUBLICID=DocTypeIdentifier.forValue(“-//W3C//DTD XHTML BASIC 1.1//EN”);
私有静态最终DocTypeIdentifier XHTML\u BASIC\u 11\u SYSTEMID=DocTypeIdentifier.forValue(“http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd");
私有静态最终DocTypeIdentifier ENTITIES\u XHTML\u BASIC\u 11\u DOCUMENT\u MODEL\u 1\u PUBLICID=DocTypeIdentifier.forValue(“-//W3C//ENTITIES XHTML BASIC 1.1 DOCUMENT MODEL 1.0//EN”);
私有静态最终DocTypeIdentifier元素\u XHTML\u BASIC\u TABLES\u 1\u PUBLICID=DocTypeIdentifier.forValue(“-//W3C//ELEMENTS XHTML BASIC TABLES 1.0//EN”);
私有静态最终DocTypeIdentifier元素\u XHTML\u INPUTMODE\u 1\u PUBLICID=DocTypeIdentifier.forValue(“-//W3C//ELEMENTS XHTML INPUTMODE 1.0//EN”);
私有静态最终DocTypeIdentifier元素\u XHTML\u TARGET\u 1\u PUBLICID=DocTypeIdentifier.forValue(“-//W3C//ELEMENTS XHTML TARGET 1.0//EN”);
私有静态最终IDocTypeResolutionEntry XHTML_BASIC_STRICT_DOC_TYPE_RESOLUTION_ENTRY=new ClassLoaderDocTypeResolutionEntry(XHTML_BASIC_11_PUBLICID,XHTML_BASIC_11_SYSTEMID,DTD_STANDARD__路径+“XHTML-basic11.DTD”);
私有静态最终IDocTypeResolutionEntities\u XHTML\u BASIC\u 11\u DOCUMENT\u MODEL\u 1\u DOC\u TYPE\u RESOLUTION\u ENTRY=new ClassLoaderDoctTypeResolutionEntry(ENTITIES\u XHTML\u BASIC\u 11\u DOCUMENT\u MODEL\u MODEL\u PUBLICID,DocTypeIdentifier.ANY,DTD\u STANDARD\u PATH+“XHTML-basic11-MODEL-1.mod”);
私有静态最终IDocTypeResolutionEntry元素\u XHTML\u BASIC\u TABLES\u 1\u DOC\u TYPE\u RESOLUTION\u ENTRY=new ClassLoaderDoctTypeResolutionEntry(元素\u XHTML\u BASIC\u TABLES\u 1\u PUBLICID,DocTypeIdentifier.ANY,DTD\u STANDARD\u PATH+“XHTML-BASIC-table-1.mod”);
私有静态最终IDocTypeResolutionEntry元素\u XHTML\u INPUTMODE\u 1\u DOC\u TYPE\u RESOLUTION\u条目=新类装入器OctTypeResolutionEntry(元素\u XHTML\u INPUTMODE\u 1\u PUBLICID,DocTypeIdentifier.ANY,DTD\u标准路径+“XHTML-INPUTMODE-1.mod”);
私有静态最终IDocTypeResolutionEntry元素\u XHTML\u TARGET\u 1\u DOC\u TYPE\u RESOLUTION\u ENTRY=new ClassLoaderDoctTypeResolutionEntry(元素\u XHTML\u TARGET\u 1\u PUBLICID,DocTypeIdentifier.ANY,DTD\u标准路径+“XHTML-TARGET-1.mod”);
@凌驾
受保护集GetAdditionalDoctyResolutionEntries(){
最终设置docTypeResolutionEntries=新LinkedHashSet();
添加(XHTML\u基本\u严格\u文档\u类型\u解析\u条目);
添加(实体、XHTML、基本、11、文档、模型、文档、类型、解析、条目);
添加(元素、XHTML、基本表、文档、类型、分辨率、条目);
添加(元素\ XHTML \输入模式\ 1 \文档\类型\解析\条目);
添加(元素\ XHTML \目标\ 1 \文档\类型\解析\条目);
返回docTypeResolutionEntries;
}
}
我按如下方式配置自定义方言:

<bean id="viewResolver" class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
    <property name="characterEncoding" value="UTF-8"/>
    <property name="templateEngine">
        <bean class="org.thymeleaf.spring4.SpringTemplateEngine">
            <property name="enableSpringELCompiler" value="true"/>
            <property name="templateResolver">
                <bean class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver">
                    <property name="prefix" value="/WEB-INF/templates/"/>
                    <property name="suffix" value=".xhtml"/>
                    <property name="templateMode" value="XML"/>
                </bean>
            </property>
        </bean>
    </property>
</bean>
mvc-config.xml
。。。
...
我的模板如下:

<bean id="viewResolver" class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
    <property name="characterEncoding" value="UTF-8"/>
    <property name="templateEngine">
        <bean class="org.thymeleaf.spring4.SpringTemplateEngine">
            <property name="enableSpringELCompiler" value="true"/>
            <property name="templateResolver">
                <bean class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver">
                    <property name="prefix" value="/WEB-INF/templates/"/>
                    <property name="suffix" value=".xhtml"/>
                    <property name="templateMode" value="XML"/>
                </bean>
            </property>
        </bean>
    </property>
</bean>
DemoTemplate.xhtml

演示
演示内容


问题 乍一看,这似乎很好,只是生成的XHTML缺少XML头,并且每个元素都添加了几个额外的属性

渲染输出:

演示

演示内容

这与XHTML的基本可编程性不太匹配;首先,我想保留XML声明

更重要的是,我不想要
xmlns=”http://www.w3.org/1999/xhtml“
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“
xml:space=“preserve”
属性添加到几乎每个元素中。还有一个
version=“-//W3C//DTD XHTML Basic 1.1//EN”
属性添加到
元素中

我是否做错了什么,是否需要进行不同的配置,或者是否缺少自定义方言中的某些内容

我没有“规范”证据表明XHTML基本模板不能用Thymeleaf 2.x按照您想要的方式处理,而且可能有一种方法需要付出足够的努力。但我确实看到了:

  • 在Thymeleaf中,2.1看起来很可疑,在Thymeleaf 3.0中不再存在
  • 现在已弃用了,以及
  • 所有的数据都在3.0版本中
这一点,再加上我自己的努力,使一些工作