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

vueでのコンポーネント間の変数のやりとりに関して

vueをコツコツと勉強していますが、コンポーネント間で変数の受け渡しをしたいときなどは色々注意が必要かと思います。 個人的には下記のような解釈で組んでおります。 Contents1 vuex2 syn …

no image

JavaScriptのcookieに関して

今までCookieの管理などはPHP側でやることが多かったのですが、JavaSciprtで実行することも可能です。 設定に関してはkey=value形式で突っ込めばOKです。 [crayon-675a …

no image

vueに関する小ネタ(computed、v-classなど)

先日は埋め込み形式で、vueを書いてましたが、その時に新たな気づいた小ネタなど。 Contents1 computed2 v-class3 ajaxのasync:false computed 主に、v …

no image

Streamでの特定条件化のカウント&合計値算出

Java8、streamで値を抽出し、カウントと合計値の算出について、小ネタです。 一番多いのがList<Map>タイプの値の検出です。 [crayon-675a91d339f6b6916 …

no image

配列の参照の仕方

変数が存在しているにもかかわらず値が入っていないときは、プログラミングではNULLという表記をします。(ちなみに空白が入っているのとは違います。) これはプログラマにとってはほぼ常識的な内容なのですが …

アーカイブ