blog
ブログ

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

まとめ

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

 

では、また次回。
contact

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

翻訳

SFA/CRMに蓄積されている情報を活用する方法ガイド