skillup

技術ブログ

Java JavaScript

JSF+ajax

投稿日:2015年9月5日 更新日:

JSFでajaxを使うときにいろいろと調べたのでメモ。

やろうとしたことはWEB上で給与明細の計算をしたくて、プルダウンで月の変更したら自動的に経費が該当月に替わるというシステムです。

ajaxを使うときの考え方ですが、基本的には

  1. トリガー
  2. 送信コンポーネント
  3. メソッド
  4. レンダー

に注意します。

1.トリガー

ようはどのイベントが起こった時に通信が発生するかという起点になる動きのことです。

<f:ajax>の部分がajaxのタグを記述する場所になります。

ソースは該当月の部分のみです。

このeventとという部分がトリガーになります。今回はプルダウンを変更したら~という設定にしてあります。

トリガーとなるイベントは通常のJavaScriptのイベントであれば大体大丈夫かと思います。

2.送信コンポーネント

次はトリガーが起こった時にどのデータをCDI側に送るかです。executeで指定します。

今回は該当月のみ(自分自身)なので@thisとしてありますが、下記のような送信方法があります。

  • 全体・・@all
  • form内全体・・@form
  • 送らない・・@none
  • 自分自身・・@this
  • idの場合にはexecute=”sample_id sample_id2″などスペースを空けて指定。

3.メソッド

listenerに記述。ここでCDIのメソッドを呼ぶことができます。

またAjaxを使うときはスコープをRequestではなくViewにしたほうがよいでしょう。

RequestだとイベントのたびにCDIが初期化されますがViewであれば該当メソッドだけ呼ばれるため、その分処理が速くなります。

4.レンダー

ここがJSFのポイントなんですが、CDIのプロパティが変わっても自動的に画面側の値は変わりません!

どの値をレンダリングさせるか?ということを指定してあげないといけないんですね。

これで結構時間食いました。CDIの値がしっかり変わっているのに画面の値が変わらない・・・

どの値を反映させるかがrenderになります。

ちなみに指定方法はexecuteと同じになります。

番外

ajax反映後のjquery

給与明細には経費の詳細を見れるようにボタンにトリガーを付けておいたのですが、ajax反映後変化しないというバグが起こりました。

そういえば昔、ajaxで追加したテーブルはjqueryが起動しませんでしたね・・・

解決手段ですが、下記のように記述しておけば無事起動します。

下記リンクを参考にしました。

jQueryで後から追加した要素へのclickイベントはonを使う

追記

ちなみにajaxはクロスドメイン(ドメインが違うもの)のものを読み込んだり、アクセスしたりはできません。

jqueryを外部のURLから読み込んだ時にこの問題が起きるので注意しましょう。(ブラウザのコンソール機能でみるとわかりやすい。)

続 クロスドメインで使う XMLHttpRequest と CORS の話
AjaxでAccess-Control-Allow-Originのエラーを回避する方法

-Java, JavaScript
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

mavenのリモートリポジトリについて

JPAでO/Rマッパーに慣れてからというもの通常のSQLをごりごり書くのが億劫になってきました。 億劫というかいろいろとリスクがありますね。 問題点としてはコンパイルするときにエラーが検知できなかった …

no image

リファクタリング

業務で大幅なリファクタリングをする機会があり、その際の注意だったり、気をつけるべきことなどをまとめておきます。 自分用なので自分にしかわからない言葉で書いてある可能性が大きいです。 気になる方は問い合 …

no image

ajaxがらみのイベントの発動とwhenに関して

実務で住所のプルダウンを実装する機会がありました。 [東京都][中央区][明石町] みたいにカテゴリーが2〜3あって連動するプルダウンのパターンです。 これを実装するときのポイントですが、新規保存より …

no image

JSFでのjQuery

JSFでのjQueryの取得 以前、Seleniumに関連したエントリーを書いたときにJSFではidが親要素を伴うと書きました。 例えば <form id=”form1″ …

no image

JavaEEでのURLマッピング

Contents1 URLマッピング1.1 prettyfaces1.2 導入方法1.2.1 pom.xmlの設定1.2.2 pretty-config.xmlの設定1.3 ManagedBeanでの …