2011年11月23日水曜日

[JavaScript]リンクのURLクエリをPOSTで送信する



先日、検索 → 一覧 → 詳細 という画面に対して、


  1. 一覧から詳細画面へはリンクをつかって遷移すること
  2. 詳細画面から一覧画面へは「パンくず」リンクを利用して戻れるようにすること
  3. 一覧画面は検索したときの条件で絞り込まれた一覧が表示されること
  4. 詳細画面へのURLに検索条件のURLクエリをつけず、詳細データへのIDのみをクエリにつけること
  5. Cookie(セッション)利用不可

という依頼を受けました。
SEO対策のためにURLに余計なクエリをつけたくないけど、パンくずのフローは辿ってきたフローをちゃんと戻れるようにしたいというのが趣旨でした。
そこでHTMLを生成するときには、ID、検索条件ともにリンクのURLにクエリとして追加しておき、Javascriptを利用して、URLからクエリの一部を抜き取り、リンクをクリックしたときに、それらがPOSTされるようにしました。
書いておけば、後々役に立つかなと思ったので書いてみることにしました。
下がそのサンプルになります。
どちらも同じURLを指定していますが、開く画面は別になるようになっています。

この処理の手順はこんな感じになります。
  1. リンク要素を取得する
  2. リンクのURLをアドレスとクエリにわける
  3. 動的にフォームを生成し、生成したフォームにクエリをhiddenとして追加していく
  4. リンクのhref属性の書き替え
  5. リンククリック時に生成したフォームがsubmitされるようにする

2011年11月3日木曜日

ScalaでSwingレイアウト(GridBagPanel編)

scala.swingでは、レイアウトのクラスとPanelが一つのクラスになっています。
GridBagPanelはGridBagLayoutとJPanelクラスが合わさったクラスです。
GridBagPanelはレイアウトの自由度がかなり高いクラスとなっており、これを利用すれば、おおよその画面レイアウトは実装できてしまうのではないでしょうか?

主な使い方は以下の通りです。
  1. GridBagPanelの基本的な仕組み
  2. GridBagPanelクラスの基本的な利用方法
  3. GridBagPanelの色々なレイアウトオプション

ScalaでSwingレイアウト(BoxPanel編)

ScalaでSwingアプリを作っていたんですが(これまた今更ですが・・・)、Scalaに限らずSwingをやっていて、個人的にいつも困るのがフォームのレイアウトだったりします。
普段はWebプログラマ~な自分からすると、Swingのレイアウトマネージャーって、非常に使いづらい。「そんなんだから Adobe Airに・・・」なんてことが出掛ってしまうぐらい使いづらい。そんなSwingですが、Scalaを利用して実装すると少しはマシになるな~というのを実感する今日この頃なので、少しずつScalaでのSwingの利用方法を紹介できたらなんて思っています。そんでもって、まずはBoxPanelクラスを紹介しようと思います。
Scalaではパネルを設定するのにPanelクラスとレイアウトマネージャがセットになっている以下のクラスを利用するようになっています。

  1. BorderPanel
  2. BoxPanel
  3. FlowPanel
  4. GridBagPanel
  5. GridPanel
その中からBoxPanelを何故最初に紹介するかというと、フォームの右寄せ、上寄せができる数少ない(唯一?)レイアウトマネージャだからです。

  1. BoxPanelを定義し、コンポーネントを配置する方向を指定する
  2. コンポーネントの表示位置を設定する
  3. Swingクラスを利用して、隙間を挿入する