2014-05-12 9 views
9

questo dovrebbe essere facile ma non riesco a trovare alcuna soluzione.Thymeleaf + Boot + Errore di parser delle direttive AngularJS

Sto utilizzando Spring Boot 1.0.2 con Thymeleaf on Jetty per supportare la mia applicazione AngularJS. Ma parser genera un'eccezione quando vengono utilizzate le direttive di attributo.

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 sta funzionando bene ma ha un problema con direttive attributi come in questo esempio 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> 

ricevo questo errore

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

Dove posso modificare Thymeleaf per accettare questo tipo di attributi?

--- EDIT ---

ho aggiunto nekoHTML parser per LEGACYHTML5 ma ancora nessun risultato.

+0

Non sono un esperto di bootstrap, ma non "dropdown" una classe CSS? –

+0

No, questa è una direttiva AngularJS che crea un menu a discesa specificato. – Reeebuuk

+1

Non sono nemmeno un utente angolare, ma mi chiedo il motivo per cui è necessario scrivere xml malformato. Forse 'dropdown =" true "' funzionerebbe? –

risposta

4

Cambia la tua

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

con

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

(avviso di default).

Nel tuo caso, spring (boot) non sta usando la tua configurazione per Thymeleaf, quindi stai ricevendo questo errore "strano" sull'analisi dell'attributo non standard (dal momento che il parser predefinito è XHTML).

11

Un modo ancora più semplice per consentire a LEGACYHTML5 nella primavera del boot (almeno per la versione 1.1.3.RELEASE che ho controllato) è quello di aggiungere semplicemente la proprietà

spring.thymeleaf.mode=LEGACYHTML5

in uno dei luoghi primavera Boot cerca proprietà

(il primo che viene in mente è application.properties).

Primavera Boot ThymeleafAutoConfiguration si prenderà cura di tutto il resto

9

Nella primavera del Boot,

per utilizzare la modalità HTML5 eredità per Thymeleaf,

aggiungendo la seguente proprietà nei tuoi 'application.properties':

spring.thymeleaf.mode = LEGACYHTML5

e aggiungendo la seguente dipendenza

nel tuo 'build.Gradle'(se si sta utilizzando Gradle):

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

sarà sufficiente.

è possibile trovare un esempio di lavoro come segue:

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

e un post correlato come segue:

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

1

Senza cambiare nulla solo renderlo XML compatibile con:

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

Cordiali saluti

+1

Ha funzionato bene senza cambiare nulla – jeeva

Problemi correlati