さて、やっとこJavaOne2013のJava EE関連です(^^;
EL式はJava EE6の開発で使っているし、EL3.0だけでひとつのセッションが成り立つのか!?と興味本位に参加しました。
発表者はJSR341のExpert GroupでOracle所属のKin-man ChungさんとJSF等で有名なEd Burnsさんでした。
http://jcp.org/en/jsr/detail?id=341
内容的には、淡々とJSRの内容を読み上げるだけ…な感じもあってか、途中で人が抜けていく感じも(^^?
JSR 341 : Expression Language 3.0
Overview
そもそもEL式って…的な話が冒頭にありました。
- 2004年にJSTLにおいて出てきた
- 2006年にJSP2.0へ
- 2006年にJSF1.2とJSP2.1の両方で
- 2013年に初めてJSR341として独立した仕様へ
- JSF,JSPそしてCDIで使える
- JavaServerとnon-JavaServer stacksを差別化するキー要因
JSTLって…なんですかレベル…(^^;
JavaServer Pages Standard Tag Library、って金魚本にもありました。
最後のポチはよくわかってないです;
実際に試してみた
説明はEL式のサンプルをスライドに出しながら淡々と説明…って感じでした。
そこで挙がってたものを(せっかくなので)実際に一部試してみました。
環境
OS:Windows 8 Pro
IDE:NetBeans7.4RC1
JDK:8 Early Access
AP:GlassFish4.0
セッションにあったサンプルの一部をJSFで以下xhtmlに書いてみます。
<?xml version='1.0' encoding='UTF-8' ?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>JavaOne2013 EL3.0で遊ぶ</title>
</h:head>
<h:body>
ラムダ式<br/>
<h:outputText value="#{(x -> x + 1)(10)}" /><br/>
<h:outputText value="#{((x,y) -> x + y)(3, 4)}" /><br/>
<h:outputText value="#{(()->64)()}" /><br/>
<h:outputText value="#{incr = x -> x + 1; incr(10)}" /><br/>
<h:outputText value="#{fact = n -> n == 0 ? 1 : n * fact(n-1); fact(5)}" /><br/>
Stream API<br/>
<h:outputText value="#{[1,3,5,2].stream().sorted().toList()}" /><br/>
<h:outputText value="#{[1,2,3,4].stream().sum()}" /><br/>
プログラム側でELProcessor使って生成<br/>
<h:outputText value="#{indexBean.hello}" /><br/>
</h:body>
</html>
実行します。
普通に動きますね(^^)
ちなみにBean側でELProcessorを使いましたが以下の簡単なものです。
package jp.co.hoge.bean;
import javax.annotation.PostConstruct;
import javax.el.ELProcessor;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
@Named
@RequestScoped
public class IndexBean {
private String hello;
public String getHello() {
return hello;
}
public void setHello(String hello) {
this.hello = hello;
}
@PostConstruct
public void init(){
ELProcessor elp = new ELProcessor();
hello = (String) elp.eval("'Hello' += 'World!'");
}
}
JDK8のEarly Accessでラムダやstreamは既に試せるので、EL3.0で試すメリットも今となってはなんとも…ですが(^^;
JSFのビューでどんなことまでできるのか??あたりを掴んでおくのはアリかなと。
Support for stand-alone environment
ELでラムダとかなると、ビューでロジックがりがり書けちゃうじゃん…とか思いますが、どうもELは独立した1つの言語的な位置づけを目指しているようで、実際今回のセッションでも「Java EEとかと関係なく簡単に使える」とアピールしてました。
そういった意味では、Expression Languageという言語があって、Java EEのJSFのビューから使うこともできるよ、的な感じなのかなと。
ここは幾つか具体的なコードもあったので、後で書き加えられればと思います。