私は、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
パスを使用する必要がありますか?)
感謝。残念ながら、これはうまくいかなかった。 "/app/css/framework.css"に解決され、404エラーが発生しました。 – dave