blog
ブログ

Salesforce技術ブログ:URLパラメータではまった話

ハロー、ハリーくめです

初夏のころ我が家のベランダでハトが子育てをしておりまして、
先日業者の方に家主がいなくなった巣の除去をしてもらいました。
ついでにハウスクリーニングもしてもらったのですが、さすがプロ、ぴっかぴかになりました。
最近のハウスクリーニングはLINEで依頼から見積までできるので、手軽で便利ですね。

さて、タイトルに書いているとおり、今回は開発中にはまったものの紹介。
※なんてことはないケアレスミスの話です!

ブラウザバックに対応した検索画面

今回作成していたのは、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/>の名前は同じにしてはいけないと勉強になりました。

まとめ

<apex:param/>で実在するURLパラメータの値は上書きはできないので、パラメータ名を変えましょう。

 

では、また次回。
contact

ご相談・ご質問等ございましたら、お気軽にお問い合わせください。

翻訳