2017-09-26 12 views
2

私は、SpringベースのJava Webアプリケーションと共通フレームワークライブラリのセットをJARファイル経由ですべて利用できます。私はThymeleafを使用しています。ThymeleafテンプレートからライブラリJARファイルのスタイルシートにアクセスするにはどうすればよいですか?

私はいくつかのWebアプリケーションで使用される共通のThymeleafテンプレートを持っています。テンプレートHTMLファイルとそれに関連するスタイルシートは、両方ともライブラリのJARファイルにあります。 Webアプリケーションがフレームワークテンプレートに基づくビューを表示すると、そのテンプレートはThymeleafによって見つけられ、処理されます。

私の問題は、スタイルシートを読み込んでブラウザに戻す方法を理解できないということです。最終的な結果は、(正確ではあるが)スタイルの違うHTMLです。

ビルドツールとしてGradleを使用しています。ここで

は、フレームワークのための私の関連するプロジェクト構造です:

common-framework/src/main 
    ../java      - contains the framework code 
    ../resources     - contains the framework resources 
     ../static 
      ../css 
       example.css   - Style sheet for use in templates 
     ../templates 
      ../fwk 
       example.html  - Thymeleaf template 

は、ここに例のアプリのための私の関連するプロジェクト構造です:

app/src/main 
    ../java      - contains the application code 
    ../resources     - contains the application resources 
     ../templates 
      ../app 
       start.html   - Thymeleaf template 
    ../webapp 
     ../resources 
      ../css 
       app.css    - Style sheet for use in the app 

ここでアプリの両方で使用されているViewResolver豆ですテンプレートを見つけるためのフレームワーク:

@Bean 
public ViewResolver viewResolver() 
{ 
    ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver(); 
    templateResolver.setTemplateMode("HTML5"); 
    templateResolver.setPrefix("templates/"); 
    templateResolver.setSuffix(".html"); 
    templateResolver.setCharacterEncoding("UTF-8"); 
    templateResolver.setOrder(1); 

    SpringTemplateEngine engine = new SpringTemplateEngine(); 
    engine.setTemplateResolver(templateResolver); 

    ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); 
    viewResolver.setTemplateEngine(engine); 
    viewResolver.setCharacterEncoding("UTF-8"); 
    viewResolver.setOrder(1); 

    return viewResolver; 
} 

(私のWebMvcConfigurerAdapterから)ソースハンドラの設定:ここでは

@Override 
public void addResourceHandlers(ResourceHandlerRegistry registry) 
{ 
    registry.addResourceHandler("/resources/**") 
      .addResourceLocations("/resources/"); 
} 

は、フレームワークThymeleafのテンプレートです(fwk/example.html)ここで

<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-spring4-4.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"> 

<head> 
    <meta charset="utf-8" /> 
    <title th:text="${title}"></title> 
    <link rel="stylesheet" type="text/css" th:href="@{/resources/static/css/framework.css}" /> <!-- *** PROBLEM IS HERE *** --> 
</head> 
<body> 
    ... 
</body> 
</html> 

は、アプリケーションThymeleafのテンプレートです(アプリ/ start.htmlここ)

<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-spring4-4.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"> 

<head> 
    <meta charset="utf-8" /> 
    <title th:text="${title}"></title> 
    <link rel="stylesheet" type="text/css" th:href="@{/resources/css/app.css}" /> <!-- *** This works correctly. *** --> 
</head> 
<body> 
    ... 
</body> 
</html> 

ここに、Webアプリケーションのサンプルコントローラがあります。注:これはフレームワークライブラリに依存する別個のプロジェクトです。

@Controller 
public class ExampleController 
{ 
    @GetMapping(path = "/start") 
    public String start(Model model, HttpServletRequest request) 
    { 
     ... 
     return "app/start"; // Uses an application template 
    } 

    @GetMapping(path = "/example") 
    public String example(Model model) 
    { 
     ... 
     return "fwk/example"; // Uses a framework template 
    } 
} 

ウェブアプリケーションはTomcatで動作し、フレームワークライブラリのJARファイルを利用できます。コントローラURLをテストすると、両方が正しく読み込まれます。つまり、どちらの場合も、テンプレートが検索され、ロードされ、表示されます。

しかし、上記のとおり、(/example URLでトリガーされた)フレームワークテンプレートは、そのフレームワークCSSファイルが見つからず、ブラウザーに渡されるのでスタイルが変更されません。これをどのように達成するのですか?

は(私の骨格構造は大丈夫ですか?私のViewResolverが正しく設定されていますか?ハンドリング私のリソースが正しく設定されていますか?私は同じJARにスタイルシートを参照するためのフレームワークテンプレートに何hrefパスを使用する必要がありますか?)

答えて

0

でexample.html交換してください:

<link rel="stylesheet" type="text/css" th:href="@{/resources/static/css/framework.css}" /> 

で:答えを

<link rel="stylesheet" type="text/css" th:href="@{/css/framework.css}"/> 
+0

感謝。残念ながら、これはうまくいかなかった。 "/app/css/framework.css"に解決され、404エラーが発生しました。 – dave

関連する問題