PrimeFaces 5.0 RC1がリリースされました!

JSFのコンポーネントライブラリであるPrimeFacesの5.0 RC1がリリースされました。

少し前に5.0で、どんなコンポーネントが追加されるか、簡単に紹介させて頂きました。

PrimeFaces 5.0の新コンポーネントや新機能!

というわけで早速RC1をちょっと触ってみました。

Maven使うのが楽なのでMavenと、今回はJava EE7(GlassFish 4.0), JDK 8でサンプル作ってみました。

PrimeFaces用のMavenリポジトリがあるのでrepositoriesタグに以下を追加して

<repositories>
    <repository>
        <id>prime-repo</id>
        <name>PrimeFaces Maven Repository</name>
        <url>http://repository.primefaces.org</url>
        <layout>default</layout>
    </repository>
</repositories>

依存性は以下定義すれば準備OKです。

<dependency>
    <groupId>org.primefaces</groupId>
    <artifactId>primefaces</artifactId>
    <version>5.0.RC1</version>
</dependency>

PrimeFacesのDataTableは結構いろんなことができるので、業務システム的にはありがたかったのですが、なぜか今までずっと行固定しかなくてカラム固定がありませんでした…。

海外はそういうものなのか?と思っていましたが、やはり海外でもあちこちそういう要望あって、今回の5.0で無事に入ったみたいです。

ということで、今回はそれをサンプルに。

先に結果から。

カラムを2個固定した場合

f:id:kikutaro777:20140416224847j:plain

スクロールすると

f:id:kikutaro777:20140416224856j:plain

カラムを3個固定に変えてみると

f:id:kikutaro777:20140416224908j:plain

ふむふむ、悪くない。

固定するカラムの数はビュー定義でfrozenColumns属性を指定するだけなので簡単です。
以下、ビューの定義

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>女優さん一覧</title>
    </h:head>
    <h:body>
        <h:form>
            <p:dataTable var="actress" value="#{actressBean.listActress}" 
              frozenColumns="3" scrollable="true" scrollWidth="400">
                <p:column headerText="名前">
                    <h:outputText value="#{actress.name}" />
                </p:column>
                <p:column headerText="年齢">
                    <h:outputText value="#{actress.age}" />
                </p:column>
                <p:column headerText="生年月日">
                    <h:outputText value="#{actress.birth}" />
                </p:column>
                <p:column headerText="身長">
                    <h:outputText value="#{actress.height}" />
                </p:column>
                <p:column headerText="血液型">
                    <h:outputText value="#{actress.blood}" />
                </p:column>
                <p:column headerText="所属事務所">
                    <h:outputText value="#{actress.company}" />
                </p:column>
            </p:dataTable>
        </h:form>
    </h:body>
</html>

Backing Beanは

import java.io.Serializable;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.Arrays;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.view.ViewScoped;
import javax.inject.Named;
import lombok.Getter;

@ViewScoped
public class ActressBean implements Serializable{

    @Getter
    private List<Actress> listActress;
    
    @PostConstruct
    public void init(){
        System.out.println("hello");
        listActress = Arrays.asList(
                new Actress("堀北真希", 25, LocalDateTime.of(1988, 10, 6, 0, 0), "SweetPower", 160, BloodType.B),
                new Actress("宮崎あおい", 28, LocalDateTime.of(1985, 11, 30, 0, 0), "ヒラタオフィス", 163, BloodType.O),
                new Actress("有村架純", 21, LocalDateTime.of(1993, 2, 13, 0, 0), "フラーム", 160, BloodType.B)
        );
    }
}

Java 8のDate and Time API全然使い慣れず…ちょっと適当です(^^;汗 勉強せんと。

あとは女優さんクラスと

import java.time.LocalDateTime;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;

@Getter @Setter
@AllArgsConstructor
public class Actress {
    private String name;
    private int age;
    private LocalDateTime birth;
    private String company;
    private int height;
    private BloodType blood;
}

enumだけ

public enum BloodType {
    A,
    B,
    O,
    AB
}

これから少しずつ5.0RC1触っていこうと思います~。

BeanUtils.copyPropertiesによるフィールド値コピー

後輩が使ってたコードをネタとして拝借(^^;

うちでは案件管理システムなどの開発が多いのですが、業務の中で

「見積が確定して受注した際、見積の情報を受注へと引き継ぐ」

みたいなのが結構あったりします。

そんなときに見積のEntityが持つ属性情報から1つ1つ受注Entityに入れていく…みたいなことをする場合もあったりするのですが、BeanUtils使うと、簡単にプロパティ情報をコピーできて便利でした。

既に色々情報あって参考にさせて頂きました。こんなのあるなんて知らなかった(>_<;

Maven使っていればpom.xmlに以下依存性を定義するだけ。

<dependency>
    <groupId>commons-beanutils</groupId>
    <artifactId>commons-beanutils</artifactId>
    <version>1.9.1</version>
</dependency>

ちょっとしたお試しコード書いてみました。
JPAのEntityではなく、とりあえず普通のクラスです。
(Lombok使ってます)

/**
 * 見積の情報クラス
 */
@Getter @Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Quote{
    private String quoteId;
    private String name;
    private String customerId;
    private BigDecimal quotePrice;
}
/**
 * 受注の情報クラス
 */
@Getter @Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Order{
    private String orderId;
    private String name;
    private String customerId;
}

で、見積のインスタンス作って、属性にも値をセット。
受注のインスタンス作ってBeansUtils.copyPropertiesで属性コピー

Quote quote = new Quote("quote1", "見積1", "hogehoge",new BigDecimal(3000));
Order order = new Order();

//見積のプロパティを受注へコピー
BeanUtils.copyProperties(order, quote);
System.out.println(quote);
System.out.println(order);

標準出力結果は以下

Quote(quoteId=quote1, name=見積1, customerId=hogehoge, quotePrice=3000)
Order(orderId=null, name=見積1, customerId=hogehoge)

プロパティ名が一致する部分だけコピーされてます。便利。
内部的にはリフレクションとか使ってるのかな?一度コードリーディングしてみたい気も。

前にディープコピーを実装したとき、Dozerとか使ったけど、これ使うのもありかなと思ったり。

というか、オフショア先のコードで、エンティティをディープコピーする際、自前で単純にnewした後、ひたすらコピー元のフィールド値を延々とセットし続けるコードを前にみたのだけど、これ使えば1行で書けるし、属性増えたときも改造いらないんだけどなぁ…。

Emotional Jenkins PluginとEmail-ext pluginで通知メールに感情を込めてみました

4月になって初めてのブログ更新です(^^;ここまで書かなかったのは久々な気が。

というのも今週あるOracleさんのセミナーにお声かけ頂き、ずっと発表資料の準備してたためでした。

最新のJavaを3時間で知る!Java解説セミナー

なんか場違いな気がすごいして…今から緊張しててあれなんですが…せっかくの機会なので頑張りたいなと思います。

……

少し前に仕事環境のJenkinsにEmotional Jenkins Pluginを入れて遊んで環境改善してみたのですが、なんか面白くて気に入りました(^^)

普段はふつうのJenkins執事さんですが
f:id:kikutaro777:20140414184058j:plain

ビルドエラーやテスト失敗、デプロイにこけたりすると
f:id:kikutaro777:20140414184129j:plain

の形相に!

ただ、Jenkinsの画面を見に行かないとわからないのが少し残念だなぁと思ったり(^^;

先に結果に気づくのは通知メールだったりするので。

ということで、ビルド通知やデプロイ通知でJenkinsから出している自動メールの添付ファイルとしてEmotional Jenkins Pluginの画像を付けてみました(^^;

こんな感じのメールが届きます。

問題ないとき

f:id:kikutaro777:20140414182950j:plain

問題があったとき

f:id:kikutaro777:20140414182956j:plain

通知メールがすごくうっとおしくわかりやすくなった!

メールはEmail-ext pluginを利用してSuccessやFailureをトリガーにしてるのですが、その設定でAttachmentsとしてEmotional Jenkins Pluginの画像を拝借しただけです。

f:id:kikutaro777:20140414183546j:plain

夜間ビルドが失敗してたりして、朝このメールをみると「ぶっ」と吹いて何か笑って「誰だよ~」って感じに許せるので、感情は大切だなぁと思ったり。(いいのかw)

ちなみに余談ですがEmotional Jenkins Pluginを知ったのは、昨年末のJJUG ナイトセミナ 「師走の Jenkins 祭り」でスライドに見たことないJenkinsおじさまの画像が出てきて、以下ツイートしたとき、作者の@masanobuimaiさんから教えてもらいました(^^;


にほんブログ村 IT技術ブログへ
にほんブログ村
にほんブログ村 IT技術ブログ Javaへ
にほんブログ村
QLOOKアクセス解析