2014-05-12 11 views
9

Dies sollte eine einfache sein, aber ich kann keine Lösung dafür finden.Thymoleaf + Boot + AngularJS Direktiven Parser Fehler

Ich benutze Spring Boot 1.0.2 mit Thymeleaf auf Jetty, um meine AngularJS-Anwendung zu unterstützen. Der Parser löst jedoch eine Ausnahme aus, wenn Attributzuweisungen verwendet werden.

pom.xml

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-thymeleaf</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>net.sourceforge.nekohtml</groupId> 
     <artifactId>nekohtml</artifactId> 
     <version>1.9.20</version> 
    </dependency> 

Thymeleaf Config

@Configuration 
public class ThymeleafConfig { 

@Bean 
public ServletContextTemplateResolver templateResolver() { 
    ServletContextTemplateResolver resolver = new ServletContextTemplateResolver(); 
    resolver.setPrefix("/templates/"); 
    resolver.setSuffix(".html"); 
    resolver.setTemplateMode("LEGACYHTML5"); 
    resolver.setCacheable(false); 
    return resolver; 
} 

@Bean 
public ResourceBundleMessageSource messageSource() { 
    ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); 
    messageSource.setBasename("messages"); 
    messageSource.setDefaultEncoding("UTF-8"); 

    return messageSource; 
} 
} 

Thymeleaf arbeitet ok, aber es ein Problem mit dem Attribut Richtlinien wie diese Bootstrap UI Beispiel hat:

<div class="btn-group" dropdown is-open="true"> 
      <button type="button" class="btn btn-primary dropdown-toggle">Button dropdown <span  class="caret"></span> 
      </button> 
      <ul class="dropdown-menu" role="menu"> 
       <li><a href="#">Action</a></li> 
       <li><a href="#">Another action</a></li> 
       <li><a href="#">Something else here</a></li> 
       <li class="divider"></li> 
       <li><a href="#">Separated link</a></li> 
      </ul> 
     </div> 

I erhalten Dieser Fehler

org.xml.sax.SAXParseException: Attribute name "dropdown" associated with an element type "div" must be followed by the ' = ' character. 

Wo kann ich Thymeleaf optimieren, um diese Art von Attributen zu akzeptieren?

--- EDIT ---

Ich habe für LEGACYHTML5 nekoHTML Parser hinzugefügt, aber noch kein Ergebnis.

+0

Ich bin nicht wirklich ein Bootstrap-Experte, aber ist nicht ein "Dropdown" eine CSS-Klasse? –

+0

Nein, das ist eine AngularJS-Direktive, die ein spezifisches Dropdown erzeugt. – Reeebuuk

+1

Ich bin auch kein eckiger Benutzer, aber ich frage mich, warum Sie fehlerhafte XML schreiben müssen. Vielleicht würde 'dropdown =" true "' funktionieren? –

Antwort

4

ändern

@Bean 
public ServletContextTemplateResolver templateResolver() { ... } 

mit

@Bean 
public ServletContextTemplateResolver defaultTemplateResolver() { ... } 

(Hinweis Standard).

In Ihrem Fall verwendet spring (boot) nicht Ihre Konfiguration für Thymeleaf, daher erhalten Sie diesen "seltsamen" Fehler beim Parsen von Nicht-Standardattributen (da der Standardparser XHTML ist).

11

Eine noch einfachere Art und Weise zu LEGACYHTML5 im Frühjahr Boot (zumindest für die Version 1.1.3.RELEASE, die ich überprüfte) aktivieren ist, einfach die Eigenschaft hinzufügen

spring.thymeleaf.mode=LEGACYHTML5

in einen der Orte, Frühling Boot sucht nach Eigenschaften

(die erste, die in den Sinn kommt ist application.properties).

Frühling Stiefel ist ThymeleafAutoConfiguration kümmert sich um den Rest

9

Im Frühjahr Stiefel,

für Thymeleaf Legacy-HTML5-Modus zu verwenden,

Zugabe die folgende Eigenschaft in Ihrem application.properties ':

spring.thymeleaf.mode = LEGACYHTML5

und Hinzufügen der folgenden Abhängigkeit

in Ihrem 'Build.gradle‘(wenn Sie mit Gradle):

Kompilierung ("net.sourceforge.nekohtml: nekohtml: 1.9.21")

ausreichend.

Sie können ein funktionierendes Beispiel finden Sie wie folgt vor:

https://github.com/izeye/samples-spring-boot-branches/tree/thymeleaf

und ein Ergebniss zu wie folgt:

http://izeye.blogspot.kr/2015/02/orgxmlsaxsaxparseexception-attribute.html

1

ohne etwas zu ändern gerade machen XML kompatibel:

<div class="btn-group" dropdown="dropdown" is-open="true"> 
    <button type="button" class="btn btn-primary dropdown-toggle">Button dropdown <span  class="caret"></span> 
    </button> 
    <ul class="dropdown-menu" role="menu"> 
     <li><a href="#">Action</a></li> 
     <li><a href="#">Another action</a></li> 
     <li><a href="#">Something else here</a></li> 
     <li class="divider"></li> 
     <li><a href="#">Separated link</a></li> 
    </ul> 
</div> 

Grüße

+1

Es hat gut funktioniert, ohne etwas zu ändern – jeeva

Verwandte Themen