2014-07-04 1 views
0

Thymeleaf가 조각을 사용하도록 구성된 스프링 MVC 응용 프로그램 (타일 없음!)이 있으며 모든 파일의 확장명은 .html입니다. 모든 것이 잘 작동합니다. 이제Spring MVC + Webflow 2 + Thymeleaf 조각 : .HTML 확장자를 구성 할 수 없습니다.

내가 내 webflow URL을 호출 할 때 그는 대신 HTML의 JSP보기를로드하려고, 나는 404 오류, 설정 Webflow하려고하지만거야 (외부 흐름은 다 괜찮습니다) :

HTTP Status 404 - /app/WEB-INF/views/contest/contest-step1.jsp

코드의 킬로미터를 넣으면 좋지 않다는 것을 알고 있습니다.하지만 솔직히 내가 어떤 부분이 흥미롭고 어떤 부분인지는 알 수 없습니다.

ThymeleafConfig :

@Configuration 
public class ThymeleafConfig { 

    @Bean 
    public TemplateResolver templateResolver() { 
     ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(); 
     templateResolver.setPrefix("/WEB-INF/views/"); 
     templateResolver.setSuffix(".html"); 
     templateResolver.setTemplateMode("HTML5"); 

     /** 
     * only on development machine 
     */ 
     templateResolver.setCacheable(false); 

     return templateResolver; 
    } 

    @Bean 
    public SpringTemplateEngine templateEngine() { 
     SpringTemplateEngine templateEngine = new SpringTemplateEngine(); 

     Set<IDialect> dialects = new HashSet<IDialect>(); 
     dialects.add(springSecurityDialect()); 
     templateEngine.setAdditionalDialects(dialects);   

     templateEngine.setTemplateResolver(templateResolver()); 
     return templateEngine; 
    } 

    @Bean 
    public ThymeleafViewResolver thymeleafViewResolver() { 
     ThymeleafViewResolver resolver = new ThymeleafViewResolver(); 
     resolver.setTemplateEngine(templateEngine()); 
     return resolver; 
    } 

    @Bean 
    public SpringSecurityDialect springSecurityDialect(){ 
     SpringSecurityDialect dialect = new SpringSecurityDialect(); 
     return dialect; 
    } 
} 

WebAppConfig :

@Configuration 
@EnableWebMvc 
@ComponentScan("com.myapp") 
public class WebAppConfig extends WebMvcConfigurerAdapter { 

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

    @Bean 
    public UrlBasedViewResolver setupViewResolver() { 
     UrlBasedViewResolver resolver = new UrlBasedViewResolver(); 
     resolver.setPrefix("/WEB-INF/views/"); 
     resolver.setSuffix(".jsp"); 
     resolver.setViewClass(JstlView.class); 
     return resolver; 
    } 

    // Maps resources path to webapp/resources 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); 
    } 


    /************************************************** 
    * 
    * Web Flow: wizard contest 
    * 
    */ 
    @Autowired 
    private WebFlowConfig webFlowConfig; 

    /** 
    * Maps request paths to flows in the flowRegistry; 
    * e.g. a path of /hotels/booking looks for a flow with id "hotels/booking" 
    * 
    * Configuring this mapping allows the Dispatcher to map application resource paths 
    * to flows in a flow registry. 
    * For example, accessing the resource path /hotels/booking would result in a 
    * registry query for the flow with id hotels/booking. 
    * If a flow is found with that id, 
    * that flow will handle the request. If no flow is found, the next handler mapping in the 
    * Dispatcher's ordered chain will be queried or a "noHandlerFound" response will be returned. 
    */ 
    @Bean 
    public FlowHandlerMapping flowHandlerMapping() { 
     FlowHandlerMapping handlerMapping = new FlowHandlerMapping(); 
     handlerMapping.setOrder(-1); //0 ? 
     handlerMapping.setFlowRegistry(this.webFlowConfig.flowRegistry()); 
     return handlerMapping; 
    } 

    @Bean 
    public FlowHandlerAdapter flowHandlerAdapter() { 
     FlowHandlerAdapter handlerAdapter = new FlowHandlerAdapter(); 
     handlerAdapter.setFlowExecutor(this.webFlowConfig.flowExecutor()); 
     handlerAdapter.setSaveOutputToFlashScopeOnRedirect(true); 
     return handlerAdapter; 
    } 

    @Bean(name="contest/add") //defined in in WebFlowConfig 
    public ContestFlowHandler ContestFlowHandler() { 
     return new ContestFlowHandler(); 
    } 

    /* TODO 
    @Bean 
    public AjaxThymeleafViewResolver tilesViewResolver() { 
     AjaxThymeleafViewResolver viewResolver = new AjaxThymeleafViewResolver(); 
     viewResolver.setViewClass(FlowAjaxThymeleafTilesView.class); 
     viewResolver.setTemplateEngine(templateEngine()); 
     return viewResolver; 
    } */ 





} 

WebFlowConfig :

@Configuration 
public class WebFlowConfig extends AbstractFlowConfiguration { 
    @Autowired 
    private ThymeleafConfig thymeleafConfig; 
    //private WebFlowConfig WebAppConfig; 

    @Bean 
    public FlowDefinitionRegistry flowRegistry() { 

       return getFlowDefinitionRegistryBuilder() 
         .addFlowLocation("/WEB-INF/views/gare/gare-add-flow.xml", "gare/add") 
         .build(); 

    } 


    @Bean 
    public FlowExecutor flowExecutor() { 
     return getFlowExecutorBuilder(flowRegistry())    

       .setMaxFlowExecutions(5)      

       .setMaxFlowExecutionSnapshots(30) 

       .build(); 
    } 

    @Bean 
    public FlowBuilderServices flowBuilderServices() { 

     return getFlowBuilderServicesBuilder() 
       .setViewFactoryCreator(mvcViewFactoryCreator()) 
       .build(); 
    } 

    @Bean 
    public MvcViewFactoryCreator mvcViewFactoryCreator() { 

     MvcViewFactoryCreator factoryCreator = new MvcViewFactoryCreator(); 
     factoryCreator.setViewResolvers(Arrays.<ViewResolver>asList(this.thymeleafConfig.thymeleafViewResolver())); 
     factoryCreator.setUseSpringBeanBinding(true); 
     return factoryCreator; 
    } 


} 

내가 FOU 나에게 빠른 해결책을 제공하는 속임수를. 그러나 솔직히 나는 이것을하지는 않겠지 만, 정확하게 resolver를 구성하십시오.

답변

1

flowRegistry 메소드에서 다음을 시도하십시오. 대신이 도움이

return getFlowDefinitionRegistryBuilder() 

희망의

return getFlowDefinitionRegistryBuilder(flowBuilderServices()) 

.

+0

_org.thymeleaf.exceptions.TemplateInputException : 템플릿 "contest-details"해결 중 오류가 발생했습니다. 템플릿이 존재하지 않거나 구성된 템플릿 해결 도구 중 하나에서 액세스 할 수 없습니다. _ 또한 "_ 컨테스트 -details.html "_ _ 흐름 xml에서이 오류가 발생합니다. – SaganTheBest

+0

플로우 폴더에서 검색하는 대신보기 기본 폴더 (webapp/views)에서"contest-details.html "을 검색하는 것을 볼 수 있습니다. XML 흐름 정의 유지) – SaganTheBest

0

나는 확실하지 않다하지만 친절가 가리키는 코드

@Bean 
    public UrlBasedViewResolver setupViewResolver() { 
     UrlBasedViewResolver resolver = new UrlBasedViewResolver(); 
     resolver.setPrefix("/WEB-INF/views/"); 
     resolver.setSuffix(".jsp"); 
     resolver.setViewClass(JstlView.class); 
     return resolver; 
    } 

의 다음과 같은 부분으로 볼

<view-state id="contest-step1" model="contest" view="/WEB-INF/views/contest/contest-step1.html"></view-state> 

감사 : 트릭 흐름 XML 파일보기 파일을 설정하는 것입니다 .jsp 컨트롤러에서 호출하면 .jsp가 추가됩니다. 컨트롤러 코드는 여기에 없습니다. URL 매핑은 /login.html과 같아야합니다. 나는 thymeleaf 및 spring-webflow-2와는 많이 familier가 아닙니다.