2015-01-01 4 views
0

광산 매핑에 문제가 있습니다. 나는 다음과 같은 구성을 가진 템플릿 해결이 :요청 매핑없이 Spring 및 Thymeleaf에서 html 파일 제공

@Bean(name="templateResolver") 
    public ServletContextTemplateResolver getServletContextTemplateResolver() { 
     ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(); 
     templateResolver.setPrefix("/WEB-INF/views/"); 
     templateResolver.setSuffix(".html"); 
     templateResolver.setTemplateMode("HTML5"); 
     templateResolver.setCharacterEncoding("UTF-8"); 
     templateResolver.setCacheable(false); 
     return templateResolver; 
    } 

    @Bean(name="templateEngine") 
    public SpringTemplateEngine getTemplateEngine() { 
     SpringTemplateEngine templateEngine = new SpringTemplateEngine(); 
     templateEngine.setTemplateResolver(getServletContextTemplateResolver()); 
     return templateEngine; 
    } 

    @Bean(name="viewResolver") 
    public ThymeleafViewResolver getThymeleafViewResolver() { 
     ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); 
     viewResolver.setTemplateEngine(getTemplateEngine()); 
     viewResolver.setOrder(1); 
     viewResolver.setCharacterEncoding("UTF-8"); 
     return viewResolver; 
    } 

을 그리고 난 내 프로젝트의 구조를 가지고 : 나는 thymeleaf 스프링 4.0을 사용하고

-WEB-INF 
--views 
---home.html 
---registration.html 

. 집에, 나는 내 컨트롤러에 다음 requestMapping을 추가했습니다 :

@RequestMapping(value = "/", method = RequestMethod.GET) 
public String start(Model model) { 
    return "home"; 
} 

내가 registration.html에 대한 요청 매핑이 없습니다. 내 home.html을에서

내가 링크를 한 (thymeleaf 앵커 태그) :

 <a href="registration.html" th:href="@{/registration.html}" th:text="#{navigation.registration}">Registration</a> 

나는/MyApp를 아래 바람둥이 내 응용 프로그램을 바인더 제본하고 내가/MyApp를에 입력 할 때 나는 home.html을 페이지를 얻을 (나는 요청 매핑을 가지고있다.)하지만, /myapp/registration.html에 들어가면 404가된다.

컨트롤러에 모든 페이지를 추가하지 않고 정적 HTML 파일을 제공하려면 어떻게해야합니까? 가능한가? 정적 리소스를 사용하여 시도했지만 작동하지 않습니다.

나는 또한 내가 가지고 구조 뷰 디렉토리 레벨을 이동하려고 :

-WEB-INF 
-views 
--home.html 
--registration.html 

을 나는 /myapp/views/registration.html에 입력 할 수 있었다, 그러나 나는/MyApp를로 가져올 수 없습니다 /registration.html

답변

0

컨트롤러가없는 페이지에 액세스하려면 레이아웃과 동일하게 substituteby = "path/to/registration"을 사용하십시오. 그것을 시도하십시오. 요청에 따라 registration.html을 렌더링합니다.

+0

무엇을 의미합니까? 이 매개 변수는 div 또는 본문에 추가되어 completly 새 페이지로 이동하려고합니다. 나는 홈 페이지에 머물고 싶지 않고 내용을 바꾸고 싶다. 무슨 뜻인지 설명해 주시겠습니까? –

+0

내 말은, 홈페이지 자체에서 registration.html을 표시 할 수 있습니다. registeration.html을 다른 페이지에 표시하려면 클라이언트 - 서버 아키텍처에서 작업 할 때 서버 요청을 제공해야합니다. 그렇지 않으면 home.html에 registration.html을 표시하고 css 또는 js를 사용하여 home.html 내용을 숨 깁니다. – sitakant

0

myapp의 루트에 registration.html을 가져 오기위한 귀하의 의도는 무엇입니까? 귀하의 솔루션은 이러한 요청을 매핑하는 일반적인 동작입니다. 당신이 정적 콘텐츠를 제공하려는 경우 예를 들어 다음과 같은 동작을 사용할 수
를 XML로 : 주석과 패키지에 추가 클래스와

<mvc:resources mapping="/views/**" location="/views/" /> 

: 다음

@Configuration 
@EnableWebMvc 
public class WebConfig extends WebMvcConfigurerAdapter { 
    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/views/**").addResourceLocations("/views/"); 
    } 
} 

당신 귀하가 언급 한 컨트롤러 클래스를 사용할 수도 있습니다. 정적 페이지는 /views/yourpage.html에서 액세스 할 수 있습니다. 그것은 /views/registration.html과 비슷한 솔루션이지만, 봄에 정적 리소스를 제공하는 좀 더 편리한 방법입니다.