2014-05-12 34 views
9

điều này phải là một cách dễ dàng nhưng tôi không thể tìm thấy bất kỳ giải pháp cho nó.Thymeleaf + Boot + AngularJS chỉ thị lỗi phân tích cú pháp

Tôi đang sử dụng Spring Boot 1.0.2 với Thymeleaf trên Jetty để hỗ trợ ứng dụng AngularJS của tôi. Nhưng trình phân tích cú pháp đưa ra một ngoại lệ khi các chỉ thị thuộc tính được sử dụng.

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 cấu hình

@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 đang làm việc ok nhưng nó có một vấn đề với chỉ thị thuộc tính như thế này ví dụ 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> 

tôi nhận được lỗi này

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

Tôi có thể tinh chỉnh Thymeleaf để chấp nhận các loại thuộc tính đó ở đâu?

--- EDIT ---

Tôi đã thêm trình phân tích cú pháp nekoHTML cho LEGACYHTML5 nhưng vẫn không có kết quả.

+0

Tôi không thực sự là chuyên gia khởi động, nhưng không phải là "thả xuống" một lớp CSS? –

+0

Không, đó là một chỉ thị AngularJS tạo ra trình đơn thả xuống được chỉ định. – Reeebuuk

+1

Tôi không phải là người dùng góc cạnh, nhưng tôi tự hỏi tại sao nó yêu cầu bạn viết xml không đúng định dạng. Có lẽ 'dropdown =" true "' sẽ hoạt động? –

Trả lời

4

Thay đổi của bạn

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

với

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

(thông báo mặc định).

Trong trường hợp của bạn, mùa xuân (khởi động) không sử dụng cấu hình của bạn cho Thymeleaf, do đó bạn nhận được lỗi "lạ" này về việc phân tích thuộc tính không chuẩn (vì trình phân tích cú pháp mặc định là XHTML).

11

Một cách dễ dàng hơn để cho phép để LEGACYHTML5 trong mùa xuân Boot (ít nhất là cho phiên bản 1.1.3.RELEASE rằng tôi đã kiểm tra) là chỉ cần thêm thuộc tính

spring.thymeleaf.mode=LEGACYHTML5

ở một trong những nơi mùa xuân Khởi động tìm kiếm các thuộc tính

(lần đầu tiên xuất hiện trong đầu là application.properties).

Xuân Boot của ThymeleafAutoConfiguration sẽ chăm sóc phần còn lại

9

Trong mùa xuân Boot,

sử dụng chế độ HTML5 di sản cho Thymeleaf,

thêm các tài sản sau đây trong 'application.properties' của bạn:

spring.thymeleaf.mode = LEGACYHTML5

và thêm phụ thuộc sau đây

trong 'bản dựng của bạn.gradle'(nếu bạn đang sử dụng Gradle):

biên dịch ("net.sourceforge.nekohtml: nekohtml: 1.9.21")

sẽ là đủ.

Bạn có thể tìm thấy một ví dụ làm việc như sau:

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

và một bài có liên quan như sau:

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

1

Nếu không có thay đổi bất cứ điều gì chỉ làm cho nó XML tương thích:

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

Kính trọng

+1

Nó hoạt động tốt mà không thay đổi bất cứ điều gì – jeeva

Các vấn đề liên quan