Весна MVC 4 с XHTML?


Я прочитал руководство Spring MVC 4: http://docs.spring.io/spring-security/site/docs/4.0.x/guides/html5/form.html

И в этом руководстве он использует html (pure) с thymeleaf:

<html xmlns:th="http://www.thymeleaf.org" xmlns:tiles="http://www.thymeleaf.org">
  <head>
    <title tiles:fragment="title">Messages : Create</title>
  </head>
  <body>
    <div tiles:fragment="content">
        <form name="f" th:action="@{/login}" method="post">               
            <fieldset>
                <legend>Please Login</legend>
                <div th:if="${param.error}" class="alert alert-error">    
                    Invalid username and password.
                </div>
                <div th:if="${param.logout}" class="alert alert-success"> 
                    You have been logged out.
                </div>
                <label for="username">Username</label>
                <input type="text" id="username" name="username"/>        
                <label for="password">Password</label>
                <input type="password" id="password" name="password"/>    
                <div class="form-actions">
                    <button type="submit" class="btn">Log in</button>
                </div>
            </fieldset>
        </form>
    </div>
  </body>
</html>

Но если я попытаюсь использовать этот html-код в своем проекте, браузер будет показан: "Этот XML-файл, по-видимому, не имеет никакой информации о стиле, связанной с ним. Дерево документов показано ниже."

Почему?

Я использую Spring MVC 4 С Java Конфигурация:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.make3.mymed")
public class AppWebConfiguration extends WebMvcConfigurerAdapter {

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Bean
    public InternalResourceViewResolver internalResourceViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".xhtml");
        return resolver;
    }

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/login").setViewName("login");
        registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
    }
}

AbstractAnnotationConfigDispatcherservletinitializer:

public class SpringMVCServlet extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { JPAConfiguration.class, SecurityConfiguration.class, AppWebConfiguration.class };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return null;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }

}
1 2

1 ответ:

Вы служили странице как XHTML, но ваши элементы не находятся в http://www.w3.org/1999/xhtml , поэтому браузер не распознает элементы как HTML-элементы с одинаковым локальным именем.

Поскольку они не являются HTML-элементами, они не стилизуются в соответствии с правилами HTML, и поскольку вы не предоставили никакого другого стиля, единственное, что остается браузеру, - это применить стиль по умолчанию для XML-документов, который представляет собой визуализацию документа. дерево.

Чтобы исправить, просто добавьте http://www.w3.org/1999/xhtml пространство имен как пространство имен по умолчанию для вашего элемента <html>. то есть

<html xmlns="http://www.w3.org/1999/xhtml" 
      xmlns:th="http://www.thymeleaf.org"
      xmlns:tiles="http://www.thymeleaf.org">