服务Spring MVC时出现HTML错误,但静态查看页面时却没有错误

时间:2016-12-28 02:18:40

标签: html spring-mvc twitter-bootstrap-3 spring-boot thymeleaf

我已经下载了一个bootstrap模板,我正在尝试使用Thymeleaf和Spring MVC来提供页面服务。当我在我的计算机上静态打开实际页面时,它显示为在线显示,但是当我启动Spring Boot应用程序时,我在解析HTML文件时出错。 例: rg.xml.sax.SAXParseException:对于与元素类型“a”关联的属性“onclick”,需要打开引号。

我得到的所有异常都是rg.xml.sax.SAXParseException,无论我改变了多少它都希望我修复更多,所以我意识到这必须是一个配置问题,因为它会如何静态工作。< / p>

希望我能得到一些指示: 这是我的HTML文件的头部:

<html xmlns:th="http://www.thymeleaf.org">

<head lang="en">

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta name="description" content=""/>
<meta name="author" content=""/>

<title>Stylish Portfolio - Start Bootstrap Theme</title>

<link href="../static/css/bootstrap.min.css"
      th:href="@{css/bootstrap.min.css}" rel="stylesheet"/>

<!-- Custom CSS -->
<link href="../static/css/stylish-portfolio.css"
      th:href="@{css/stylish-portfolio.css}" rel="stylesheet"/>

<!-- Custom Fonts -->
<link href="../static/font-awesome/css/font-awesome.min.css"
      th:href="@{font-awesome/css/font-awesome.min.css}" type="text/css"/>
</head>

现在,我认为这是一个Thymeleaf问题,但是我把所有的Thymeleaf带走了,用这个标题创建了相同的文件并得到了相同的HTML错误:

<!DOCTYPE html>
<html lang="en">

<head>

<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta name="description" content=""/>
<meta name="author" content=""/>

<title>Stylish Portfolio - Start Bootstrap Theme</title>

<link href="../static/css/bootstrap.min.css"/>

<!-- Custom CSS -->
<link href="../static/css/stylish-portfolio.css"/>

<!-- Custom Fonts -->
<link href="../static/font-awesome/css/font-awesome.min.css"/>
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,300italic,400italic,700italic" rel="stylesheet" type="text/css"/>

</head>

以下是提供此内容的端点:

@RequestMapping(value = "/test", method = RequestMethod.GET)
public static String test() throws RuntimeException {
    try{
        return "index_bootstrap";
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

关于我为什么会遇到这些错误的任何指示都将是一个巨大的帮助:

2016-12-27 20:53:16.956 ERROR 73461 --- [nio-8080-exec-1] o.thymeleaf.templateparser.ErrorHandler  : [THYMELEAF][http-nio-8080-exec-1] Fatal error during parsing

org.xml.sax.SAXParseException: Open quote is expected for attribute "onclick" associated with an  element type  "a".
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source) [xercesImpl-2.11.0.jar:na]

2016-12-27 20:53:16.959 ERROR 73461 --- [nio-8080-exec-1] org.thymeleaf.TemplateEngine             : [THYMELEAF][http-nio-8080-exec-1] Exception processing template "index2": Exception parsing document: template="index2", line 34 - column 36
2016-12-27 20:53:16.963 ERROR 73461 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateInputException: Exception parsing document: template="index2", line 34 - column 36] with root cause

org.xml.sax.SAXParseException: Open quote is expected for attribute "onclick" associated with an  element type  "a".

2 个答案:

答案 0 :(得分:2)

Thymeleaf 2.1(目前用于春季靴子)

你为什么得到例外?这是因为Thymeleaf以六种不同的模式工作。它们中的大多数仅适用于格式良好的XML文件。春天百里香叶的默认模式也是如此。您以粗心的HTML 5方式编写文件,这不是xml有效的,解析器无法处理这些文件。

以下是thymeleaf documentation的说明。

  

开箱即用,Thymeleaf允许您处理六种模板,每种模板称为模板模式:

     
      
  • XML
  •   
  • 有效XML
  •   
  • XHTML
  •   
  • 有效的XHTML
  •   
  • HTML5
  •   
  • 旧版HTML5
  •   
     

所有这些模式都指的是格式良好的XML文件,但Legacy HTML5模式除外,它允许您处理HTML5文件,其中包含独立(非关闭)标记,没有值的标记属性或不在引号之间写入的标记属性。为了在这种特定模式下处理文件,Thymeleaf将首先执行转换,将您的文件转换为格式良好的XML文件,这些文件仍然是完全有效的HTML5(实际上是创建HTML5代码的推荐方法)。

根据这一点,您可以保留您的html文件,并通过将百万美元模式切换为#34; Legacy HTML5&#34;来使其工作。您可以通过两个步骤完成此任务:

  1. application.properties 文件中添加以下行:

    spring.thymeleaf.mode=LEGACYHTML5
    
  2. 此模式在类路径上需要额外的Neko库,版本大于1.9.15。如果您使用maven,只需在 pom 文件中添加以下依赖项:

    <dependency>
        <groupId>net.sourceforge.nekohtml</groupId>
        <artifactId>nekohtml</artifactId>
        <version>1.9.22</version>
    </dependency>
    
  3. 就是这样。上面的解决方案对我来说很好(使用Spring Boot 1.4.1)。

    Thymeleaf 3

    你显然没有使用那个版本的百里香,但我只是让你知道。 migration guide的第3段说,在Thymeleaf版本3中,您不需要额外的支持HTML 5文件。

      

    由于其新的解析系统,Thymeleaf 3.0不再是基于XML的,因此不再需要编写XML有效的HTML代码(即使我们仍然建议您出于易读性原因这样做)。在HTML模式下,Thymeleaf现在在封闭标签,引用属性等方面要宽松得多。

答案 1 :(得分:0)

float flt = -45732.9287f;
int intFloat = Float.floatToRawIntBits(flt);
String str = Integer.toBinaryString(intFloat);
System.out.println("------- Now do the Reverse -------");
System.out.println (str);
int revint = Integer.parseUnsignedInt(str, 2);