2014-05-12 17 views
9

to powinno być łatwe, ale nie mogę znaleźć rozwiązania dla niego.Thymeleaf + Boot + AngularJS dyrektywa parser błąd

Używam Spring Boot 1.0.2 z Thymeleaf na Jetty do obsługi mojej aplikacji AngularJS. Ale parser zgłasza wyjątek, gdy używane są dyrektywy atrybutów.

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 pracuje ok, ale ma problem z dyrektywami atrybutów takich jak ten przykład Bootstrap Ui:

<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> 

Otrzymuję ten błąd:

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

Gdzie mogę zmienić Thymeleaf, aby zaakceptować te cechy?

--- EDIT ---

Dodałem nekoHTML parser dla LEGACYHTML5 ale nadal nie wynik.

+0

Nie jestem naprawdę ekspertem od bootstrapów, ale czy nie jest to "dropdown" klasy CSS? –

+0

Nie, to jest dyrektywa AngularJS, która tworzy określone menu rozwijane. – Reeebuuk

+1

Nie jestem też użytkownikiem kątowym, ale zastanawiam się, dlaczego wymaga on napisania zniekształconego xml. Może 'dropdown =" true "' zadziała? –

Odpowiedz

4

zmienić

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

z

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

(Zawiadomienie domyślnie).

W twoim przypadku, wiosna (boot) nie używa twojej konfiguracji dla Thymeleaf, więc dostajesz "dziwny" błąd podczas analizowania niestandardowego atrybutu (ponieważ domyślnym analizatorem składni jest XHTML).

11

Jeszcze łatwiejszy sposób, aby umożliwić LEGACYHTML5 w Spring Boot (przynajmniej dla wersji 1.1.3.RELEASE że zaznaczona) jest po prostu dodać właściwość

spring.thymeleaf.mode=LEGACYHTML5

w jednym z miejsc Wiosna Boot szuka właściwości

(pierwszy, który przychodzi na myśl, to application.properties).

Wiosna osłonowego ThymeleafAutoConfiguration zajmie się resztą

9

Wiosną Boot,

użyć trybu HTML5 Legacy Thymeleaf,

dodając następującą właściwość w swoim 'application.properties':

spring.thymeleaf.mode = LEGACYHTML5

i dodanie następującej zależności:

w swojej "kompilacji.Gradle”(jeśli używasz Gradle):

kompilacji ("net.sourceforge.nekohtml: nekohtml: 01/09/21")

będzie wystarczająca.

Można znaleźć pracy przykład w następujący sposób:

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

oraz powiązane stanowisko w następujący sposób:

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

1

bez zmieniania czegokolwiek po prostu zrobić to zgodne XML:

<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> 

Pozdrowienia

+1

Wszystko działało bez niczego – jeeva