これは Mayaa Advent Calendar 2015 の13日目です。昨日は「ぶっちゃけ、Mayaaでデザイナーと仲良くなれたの?」でした。
また、Java EE Advent Calendar 2015 の10日目の続編です。
前回Spring Boot経験2時間で、Mayaaをフロントに使用する試みは残念ながら失敗してしまいましたが、その後、複数のコメントを頂き、再挑戦をしてみようと思います!
https://twitter.com/megascus/status/674901495137996800
https://twitter.com/making/status/674913610662064128
https://twitter.com/tty_twt/status/675299564476235776
https://twitter.com/tty_twt/status/675299730365145088
また、元の記事には、次のようなコメントも頂いています。
匿名
2015年12月11日 9:25 AM
SpringBoot というよりは Spring MVC ですが、
Spring MVC では AbstractView を継承したクラスを作成して、任意のViewへのアダプターを作ります。
例えば、
https://kinjouj.github.io/2013/12/spring-webmvc-4-abstractview.html
や、
http://www.codejava.net/frameworks/spring/spring-mvc-with-csv-file-download-example
などです。CSVダウンロードとかでも、AbstractViewを用います。
JSP と SpringBoot の相性が悪いのは、 SpringBoot が組み込みサーバ上で実行するため、
JSP のプリコンパイルなどの指定が難しいからだと思います。
「MayaaServletの登録をServletRegistrationBeanでやる」をやってみる
まずはこれが利くんじゃないかなという気がしました。というのも、ルートにindex.xhtmlを置いてアクセスしても、MayaaServletに処理が行っているようにまったく見えなかったからです。
最近のSpringは設定をアノテーションとクラスでやるようです。
import org.seasar.mayaa.impl.MayaaServlet;
import org.springframework.boot.context.embedded.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MayaaServletRegistration {
@Bean
public ServletRegistrationBean mayaaServlet() {
ServletRegistrationBean bean = new ServletRegistrationBean();
bean.addUrlMappings("*.xhtml");
bean.setServlet(new MayaaServlet());
return bean;
}
}
これで実行してみます。そうすると!
おっ、エラーメッセージが変わりましたよ!どうもprefixがきいていないように見えます。では、次のようにしてみたらどうでしょうか?
@Controller
public class HelloController {
@RequestMapping("/hello")
public String index(ModelAndView modelAndView) {
return "WEB-INF/view/helo.xhtml";
}
}
キタ━━━━(゚∀゚)━━━━!!
"forward:/helo.xhtml" をreturnしてみる。
@Controller
public class HelloController {
@RequestMapping("/hello")
public String index(ModelAndView modelAndView) {
return "forward:/helo.xhtml";
}
}
そうすると、このエラーに戻ります。
ふむふむ。なんとなく、最後はこれのような気がします。
@susumuis https://t.co/HHaQVy0Jcrは以下のように変更する必要があると思います。
spring.mvc.view.prefix: /WEB-INF/page/
spring.mvc.view.suffix: .xhtml
— tty (@tty_twt) 2015, 12月 11
application.properties
#spring.view.prefix: /WEB-INF/view/
spring.mvc.view.prefix: /WEB-INF/view/
#spring.view.suffix: .xhtml
spring.mvc.view.suffix: .xhtml
@Controller
public class HelloController {
@RequestMapping("/hello")
public String index(ModelAndView modelAndView) {
return "helo";
}
}
キタ━━━━(゚∀゚)━━━━!!
このままではまだMayaaとSpringコンテナそのものの連携という状態ではありませんが、Mayaaテンプレートにforwardしてしまえば、リクエストアトリビュートに入れるなりなんなりして、最低限MVCはできそうです。
きちんとやる場合は、ScriptEnvironmentあたりをカスタマイズして、きちんとDIしてあげる感じになるのかなあ。
まとめ
ということで、今回は ttyさんの予想がビンゴでした!
MayaaとSpring Bootは連携できるということで、めでたしめでたし。