Spring BootのテンプレートエンジンにMayaaを使おうとしてみるリベンジ編 #javaee #mayaa

これは Mayaa Advent Calendar 2015 の13日目です。昨日は「ぶっちゃけ、Mayaaでデザイナーと仲良くなれたの?」でした。

また、Java EE Advent Calendar 201510日目の続編です。

前回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;
    }
}

これで実行してみます。そうすると!

スクリーンショット 2015-12-13 17.00.01

おっ、エラーメッセージが変わりましたよ!どうもprefixがきいていないように見えます。では、次のようにしてみたらどうでしょうか?

@Controller
public class HelloController {
    @RequestMapping("/hello")
    public String index(ModelAndView modelAndView) {
        return "WEB-INF/view/helo.xhtml";
    }
}

スクリーンショット 2015-12-13 17.10.30

キタ━━━━(゚∀゚)━━━━!!

"forward:/helo.xhtml" をreturnしてみる。

@Controller
public class HelloController {
    @RequestMapping("/hello")
    public String index(ModelAndView modelAndView) {
        return "forward:/helo.xhtml";
    }
}

そうすると、このエラーに戻ります。

スクリーンショット 2015-12-13 17.00.01

ふむふむ。なんとなく、最後はこれのような気がします。

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

スクリーンショット 2015-12-13 17.10.30

キタ━━━━(゚∀゚)━━━━!!

このままではまだMayaaとSpringコンテナそのものの連携という状態ではありませんが、Mayaaテンプレートにforwardしてしまえば、リクエストアトリビュートに入れるなりなんなりして、最低限MVCはできそうです。

きちんとやる場合は、ScriptEnvironmentあたりをカスタマイズして、きちんとDIしてあげる感じになるのかなあ。

まとめ

ということで、今回は ttyさんの予想がビンゴでした!

MayaaとSpring Bootは連携できるということで、めでたしめでたし。

コメントを残す