はじめに
BookmarkablePageLinkを使って、値をもたせたページ遷移させると
URL欄に情報がそのまま出てしまうのでなんとかしたかった。
実装画面
ソース
ページパラメーターのエンコーダー・デコーダーを指定すればいいみたい。
参考:[wicket user-guide] (http://ci.apache.org/projects/wicket/guide/6.x/guide/single.html#urls_6) の
Controlling how page parameters are encoded with IPageParametersEncoder っていう節
まずはIPageParametersEncoderを実装した CryptoPageaParametersEncoderを作成
public class CryptionPageParametersEncoder implements IPageParametersEncoder{
@Override
public PageParameters decodePageParameters(Url url) {
PageParameters parameters = new PageParameters();
int i = 0;
for (String s : url.getSegments())
{
parameters.set(i, s);
++i;
}
for (QueryParameter p : url.getQueryParameters())
{
//各パラメーターの暗号化を解除する処理
parameters.add( 復号化メソッド(p.getKey(),p.getValue())));
}
return parameters.isEmpty() ? null : parameters;
}
@Override
public Url encodePageParameters(PageParameters pageParameters) {
Url url = new Url();
for (int i = 0; i < pageParameters.getIndexedCount(); ++i)
{
url.getSegments().add(pageParameters.get(i).toString());
}
for (PageParameters.NamedPair pair : pageParameters.getAllNamed())
{
String encryptedKey = "";
String encryptedValue = "";
//各パラメーターを暗号化する処理
encryptedKey = 暗号化メソッド(pair.getKey());
encryptedValue = 暗号化メソッド(pair.getValue());
QueryParameter param = new QueryParameter(encryptedKey, encryptedValue);
url.getQueryParameters().add(param);
}
return url;
}
}
次に、Applicationクラスのinitメソッドで、暗号化してやりとりを行いたいページに上記エンコーダーをマウントする。
public class MyApplication extends WebApplication {
public MyApplication() {
}
/**
* @see org.apache.wicket.Application#getHomePage()
*/
@Override
public Class getHomePage() {
return Page1.class;
}
@Override
protected void init() {
super.init();
//Page2ページに作成したエンコーダーをマウント
mount(new MountedMapper("/cryptedPageParameter/", Page2.class, new CryptionPageParametersEncoder()));
}
終わりに
最初このやり方がわからなくて、パラメータを各ページのコンストラクタで暗号・復号化してたから大変だった。
勉強になりました。ありがとう [wicket user-guide] (http://ci.apache.org/projects/wicket/guide/6.x/guide/single.html)