2013年12月31日火曜日

【メモ】NoSuchMethodError in javax.persistence.Table.indexes()[Ljavax/persistence/Index

環境はjavaee6 + glassfish3.1系。 

persistence.xmlを読み込むあたりで以下のエラーが発生。

「NoSuchMethodError in javax.persistence.Table.indexes()[Ljavax/persistence/Index」

結論として hibernate-entitymanagerのjarバージョンを

4.3.0.CR2

3.6.10.Final

に変更したら治りました。

 javaEE6はJPA2.0だから4系のバージョンは対応していなかったのかもしれない。

2013年12月27日金曜日

【JSF2】richfacesを動かしたかったのだが、、

下記のサイト様を参考にrichfacesを使ってみようと思いましたが、うまく行かず。。。。
http://kikutaro777.hatenablog.com/entry/2013/07/07/233121

環境は以下
・eclipse4.3 kepler
・glassfish3.1 または glassfish3.1.2.2 でも同様のエラーが発生。


cannot Deploy sample
deploy is failing=デプロイメント中にエラーが発生しました: Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: java.lang.NoClassDefFoundError: org/atmosphere/cpr/AtmosphereServlet。詳細はserver.logを参照してください。



primefacesは問題なく動作確認できたのですが、richfacesはうまくいきませんでした。
よくわかりません。




【JSF2】デフォルトエラーメッセージを変更する。

jsf-apiのjarの中を除くとメッセージファイルがある。 デフォルトロケールがjaの場合、Messages_ja.propertiesが読み込まれている。
 

WEB-INF配下にclassesフォルダを作成し、その配下に 自作のメッセージプロパティファイルを作成する。 (ファイル名形式はxxxx_ja_JP.properties。xxxx_ja.propertiesでもいいみたい。)

上書きしたいメッセージをプロパティに定義  (以下のサンプルでは必須エラー時のデフォルトメッセージ(キー名:javax.faces.component.UIInput.REQUIRED)を変更してみた)



faces-config.xmlに作成したメッセージファイルを定義する。

実際の画面は以下。必須エラーのメッセージが変更されたことを確認できる。
また、日付形式エラーメッセージはjsf-api内のメッセージプロパティの内容が表示されていることを確認。


2013年12月7日土曜日

JSF2によるカスタムバリデータのサンプル

JSF1.2系などと異なりJSF2系では必要なアノテーション定義することで設定ファイル(faces-config.xml)は必須でなくなりとてもスマートで良いですね!
なるべくならアノテーションによる既存バリデーションで済むのがベストですが、やはり、カスタムバリデータが必要なのも現実です。。
ということで、以下に携帯電話番号入力のカスタムバリデータをやってみました。

カスタムバリデータを作るには以下がポイントです。
  1. javax.faces.validator.Validatorインターフェースを実装しvalidateメソッドを実装します。
  2. カスタムバリデータクラスに対して@FacesValidatorを付与します。また一意となるIDを定義します。(例ではパッケージ+クラス名としています。)
  3. 画面側でf:validatorタグのvalidatorId属性に@FacesValidatorで指定したIDを指定します

■MobilePhoneValidator.java(カスタムバリデータクラス)
■inputSample.xhtml(入力画面)
■InputBean.java(入力画面で入力された値を格納するBeanクラス)
■inputSampleOk.xhtml(次の画面)