中年プログラマーの息抜き

ブログをはじめました。気の向くままにプログラム関連ネタをメモしていきます。

PhaseListener が2回呼ばれる件

JSFでリスナーが2回呼ばれる

・プロジェクト追加するときに作成されるweb.xmlで、「com.sun.faces.config.ConfigureListener(faces-config.xmlを使いますよというリスナ)」が定義されるのですが、これを削除すると解消しました。

検証

・PhaseListener
    @Override
    public void afterPhase(PhaseEvent arg0) {
         System.out.println("afterPhaseが呼ばれた:" + getPhaseId().toString());
    }
    @Override
    public void beforePhase(PhaseEvent phaseEvent) {
         System.out.println("beforePhaseが呼ばれた:" + getPhaseId().toString());
    }
    @Override
    public PhaseId getPhaseId() {
         return PhaseId.RENDER_RESPONSE;
    }

・2回呼ばれているときのSTDOUT
    beforePhaseが呼ばれた:RENDER_RESPONSE 6
    beforePhaseが呼ばれた:RENDER_RESPONSE 6
    [2016/08/15 15:24:10.381] Creating instance of bean 'login'
    ・・・
    [2016/08/15 15:24:10.381] Finished creating instance of bean 'login'
    afterPhaseが呼ばれた:RENDER_RESPONSE 6
    afterPhaseが呼ばれた:RENDER_RESPONSE 6

・正しく呼ばれるときのSTDOUT
    beforePhaseが呼ばれた:RENDER_RESPONSE 6
    [2016/08/15 15:29:52.390] Creating instance of bean 'login'
    ・・・
    [2016/08/15 15:29:52.390] Finished creating instance of bean 'login'
    afterPhaseが呼ばれた:RENDER_RESPONSE 6

JSF+Bean Validation を試しました

はじめに

・入力値チェックでBeanValidationを試しました。

環境

JSF+SPRING+MYBATIS+BeanValidation

説明

アノテーション指定で簡単です

(bean.java
    @NotNull(message="必須")
    @Size(min=1,max=10,message="文字数")
    @Pattern(regexp="^[0-9]*$", message="数字")
    @Email(message="メールアドレス")
    private String code;

(bean.xhtml
    <h:messages id="messages" styleClass="text-left"/>
    <input type="text" jsf:id="code" jsf:value="#{bean.code}" />
    <input type="submit" jsf:action="#{bean.submit}" value="送信" />

(web.xml
  <context-param>
     <param-name>javax.faces.validator.DISABLE_DEFAULT_BEAN_VALIDATOR</param-name>
     <param-value>false</param-value>
  </context-param>
  <context-param>
     <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
     <param-value>true</param-value>
  </context-param>

気づき

・いくつかのライブラリが必要で少しはまりました。入力値検証されない+エラーも出ない=>原因がよくわからんな・・・状態、、 ライブラリ参照で解決しました。
    hibernate-validator
    slf4j-api
    validation-api

・h:messagesでは「情報」「警告」「異常」「致命」「詳細」が設定可能
    infoClass="has-info"
    warnClass="has-warn"
    errorClass="has-error"
    fatalClass="has-fatal"
    showDetail="true"

mybatis-spring を試したところ良い感じです

はじめに

・今作成中のサービスではトランザクション管理をSPRINGで行おうと思ってます。

環境

JSF+SPRING+MYBATIS

説明

トランザクションをどう実装するか結構悩みました。
    TOMCATプール+MYBATIS+SPRINGが良い感じそうなのでいったんまとめます。



まとめ

細かい動作は修正が必要ですが、ざっくりと構築できました。
・OK:メソッドへアノテーション付与する形でトランザクションを管理
・OK:Mabatis-Generatorから出力されたファイルは変更しない
・OK:拡張MAPPER、DAO、DTOなど作らないで最小限の実装を目標とする。
・NG:コンテナ起動時、AOPExceptionが発生する。