SitesでURLパラメータではまった話
こんにちは!
今回はタイトルに書いているとおり、今回は開発中にはまったものの紹介。
※なんてことはないケアレスミスの話です!
ブラウザバックに対応した検索画面
今回作成していたのは、Sites。
検索画面で検索結果A→検索結果Bといった状態遷移を、
モバイル対応の一環としてブラウザバックできるようにする、というものでした。
このために実装したのは以下2つ
・histoyAPI でブラウザバック可能にする(※ historyAPI の戻るボタンについてはこちら)
・ブラウザバックに対応するため、すべての画面で直接遷移可能な状態にする
上記2つの実装でブラウザバック自体はできたんです。
ブラウザバック自体は。
パラメータが変わらない
実際に動かしてみるとこんな感じ。
1.検索 パラメータ「keyword=モモンガ」→ 検索 パラメータ「keyword=ハリネズミ」
→
2.検索結果「keyword=ハリネズミ」 からブラウザバック→ 検索結果「keyword=モモンガ 」
→
3.ブラウザバックで表示された画面で検索すると、
検索 パラメータ「keyword=シマリス」のはずなのに「keyword=モモンガ」の検索結果が…
問題はブラウザバックした後でした。
ブラウザバック後に検索しても、検索できない。
正確にいうと、3の時には検索処理は正常に動作しているけど、検索結果が一向に変わらない。
3で起きた現象をたどってみると以下のようになっていました。
A:パラメータ「keyword=シマリス」を渡している
B:パラメータ「keyword=モモンガ」を受け取って正常に検索している
パラメータ名が一緒
たどってみると、?部分のAjaxが保持しているパラメータが、
ブラウザバックした当時(keyword=モモンガ)のものでした。
検索時に<apex:actionFunction/>の<apex:param/> で「keyword=シマリス」を渡していたのですが、
<apex:param/>では「http://test.com?keyword=モモンガ」でもっていたAjax内のパラメータを上書きできていないんです。
ということで、こちらは<apex:param/>を変更して「paramKeyword=シマリス」にすれば問題なく検索できました。
なんてことはないはまりどころなんですが、URLパラメータと、<apex:param/>の名前は同じにしてはいけないと勉強になりました。
まとめ