0

鉱山のマッピングに問題があります。次の構成を持つテンプレート リゾルバーがあります。

    @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;
    }

そして、私は私のプロジェクトの構造を持っています:

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

私はタイムリーフとスプリング4.0を使用しています。自宅用に、コントローラーに次の 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 の下の tomcat でアプリをバインドし、/myapp で入力すると home.html ページが表示されます (そのためのリクエスト マッピングがあります) が、/myapp/registration.html で入力すると 404 が表示されます。

すべてのページをコントローラーに追加せずに、そのような静的 html ファイルを提供するには、どうすればよいですか? 出来ますか?静的リソースで試しましたが、うまくいきません。

また、ビューのディレクトリ レベルを上に移動しようとしたため、次のような構造になりました。

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

/myapp/views/registration.html には入ることができましたが、/myapp/registration.html に入ることができませんでした。

4

2 に答える 2

0

コントローラーなしでページにアクセスするには (レイアウトのように)、 th:substituteby="path/to/registration" を使用します。そして試してみてください。リクエストに基づいて registration.html をレンダリングします。

于 2015-01-02T14:13:26.583 に答える
0

myapp のルートで registration.html を取得する意図は何ですか? あなたの解決策は、それらのリクエストをマッピングする通常の動作です。静的なコンテンツを提供したい場合は、たとえば次の操作を使用できます:
with 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 を使用した場合と同様のソリューションですが、春に静的リソースを提供するためのもう少し便利な方法です。

于 2015-01-03T10:55:42.657 に答える