フレーム分割をしたページ

これも厄介でした。

1.画面のアクションを実行し、フレームタグが書いてあるHTMLを表示
  framesetにはsrc="xx.html"のようにする。
2.xx.htmlには隠しアンカータグがあり、表示したいアクションを指定する。
3.xx.htmlでjavascriptでsubmitする。
4.アクションが実行され、目的のHTMLが表示される。


これでOK?

1のアクションで2のframesetのソースで表示したいHTML用のアクションを
実行すると一見うまく表示されますが、その画面でSUBMITした場合に
値がうまく受け取れませんでした。
※リダイレクトを使っているせいかもしれません。

別ウィンドウに画面を表示する方法

P1[S2JSF]別ウィンドウに画面を表示する方法


S2JSFに限った事ではなく、JSFでも当てはまると思いますが、
submitボタンを使った場合に別ウィンドウに表示させる方法です。


当初、formのtargetをJavascriptで変える方法をとっていましたが、
これではだめで、window.openを使って明示的にウィンドウを開かないと動作がおかしくなります。
#元のウィンドウのボタンをおすと再描画だけされる。
おそらく、JSFで管理しているVIEWとのずれがそのような動作を引き起こすと思われます。

というわけで、その方法は

1.トリガーとなるボタンのアクションは次に表示したい(ポップアップで表示させたい)画面のアクションを設定する。
  再描画した時に次画面のURLをセットするためのhiddenを用意しておく。
2.処理の後、hiddenに表示させたいHTMLの値をDTOに設定し、戻り値をnull(つまり元の画面)にしておく
3.元の画面を表示するときにonloadのタイミングで1で用意したhiddenの値を読み取り、
  値がセットされている場合にその値(url)をwindow.openで開くようにする。
  *URLは元の画面からの相対パスで大丈夫です。
4.めでたく別ウィンドウで画面が表示されます。

下記のURLが参考になりました。
http://forum.java.sun.com/thread.jspa?forumID=427&threadID=573329

今使っているPCがファンの調子が悪くなり(+この間掃除したら何かのヒートシンクがぶっ飛んだ。)次期PCを調査中。
会社ではXPを使ってますが、自宅はW2Kなのでせっかくだから、次はvistaでいこうと思っています。
週アスの知識から希望スペックをだすと、

  • OS:vista アルティメット
  • CPU:Core Duo2
  • メモリ:2G以上
  • HDD:100GB以上
  • 筐体:ノート(家庭の事情もあって)
  • ディスプレイ:17インチ
  • グラボ:いい方がいいにきまってる。

で、機種選定。
なにより、ノートPCでアルティメットが少ない。。。


今現在ではドスパラDELLがクリアしている。
DELLは安いし会社でも使っているので、XPS1710がいい感じなのだが、
今週になってスペックが挙がっているは、その分値段がUPしています。(クーポン対象外だし)
先週が買だったか。。。

getElementsByClassNameは遅い

prototype.jsが提供するgetElementsByClassNameは検索範囲が多い場合はとても遅い。

開発しているシステムが最近遅いなーと思っていたら、こいつを使っているクラスが
複数あってそれぞれがonload時に悪さをしていました。
このメソッドを使う時は、2つ目の引数を必ず使い検索対象の範囲を限定的にしないと
使い物になりません。

オートコンプリート

というわけで、できました。


コンポーネント化はまだですがとりあえず、マウスでクリックすれば選べます。
JavaScriptってすごいですね。何でもありな分、学習が難しいです。
個人的には、Javaのようなコンパイラ系が好きなのですが、
JavaScriptの動的な所も魅力を感じます。


S2JSFJavaScriptって相性悪いですね。
JavaScript側はユニークになるidが欲しいのにidは固定。
かといってJSF側は複数のidを作る。
getElementByIdが使えないじゃないか!


しょうがないので、いつもgetElementsByTagNameで探しています。
何かいい方法ない?