Tsutomu Yano
benbr****@mac*****
2008年 10月 24日 (金) 21:57:12 JST
こんばんは。矢野です。 検索結果を表示するページに、現在はページのコンストラクタ引数で情報を渡している のではないでしょうか。 WicketのBookmarkablePageは、WebPageクラスのサブクラスであるだけでなく、次のような コンストラクタをもっている必要があります。 public MyPage(PageParameters parameters) (MyPageはご自分のページクラス名だと思ってください) つまりPageParametersを引数にとるコンストラクタが必要です。 そしてあなたのApplicationサブクラスのinitメソッドの中で、次のようにしてUrlCodingStrategyと 一緒にページをマウントします。UrlCodingStrategyとは、URLの記述方法を定めたオブジェクトです。 mount(new QueryStringUrlCodingStrategy("/query", MyPage.class)); これで、/queryにアクセスするとMyPageが表示されるようになります。QueryStringUrlCodingStrategyは、 URLが「query?key=value」のような構成であるとしてパラメータを解析してくれます。 パラメータは先ほどのコンストラクタのPageParametersとして渡ってきます。parameters.getString()で 値を取り出すことができます。 現在、ページ遷移をするときにはsetResponsePageを使っていると思います。ここにPageのインスタンス を渡すのではなく、次のようにクラスを渡すようにします。 setResponsePage(MyPage.class, "key=value"); setResponsePageにclassオブジェクトを渡す形式の場合は、前述のコンストラクタが自動的に呼び出され ます。その場合にはURLがmount()メソッドで指定したものになりますので、「/query?key=value」の ようになります。 一方、setResponsePageにインスタンスを渡すと、Wicketは渡されたインスタンスごとに自動的にURLを 生成しますので、「?wicket:interface=:22:form::IFormSubmitListener::」のようなURLになってしまい ます。 BookmarkablePageを使う場合は ・PageクラスをWebApplicationサブクラスでマウントする ・遷移するときはPageインスタンスではなくclassオブジェクトを使う ・引き継ぎ情報はパラメータで渡す ということを守る必要があるということです。 もし現在、検索処理を「検索ボタンを押したとき」に行っているならば、その処理を前述のコンストラ クタ内で行うように変える必要があるかもしれません。検索条件をPageParametersとして引き渡して、 コンストラクタ内でPageParametersから条件を取得してから検索を実行するようにすればいいでしょう。 On 2008/10/24, at 15:09, �ROI 林 豪樹 wrote: > 初めまして、林と申します。 > wicketでWebサイトを開発しています。 > よろしくお願いいたします。 > > 1点わからないことがあり質問をさせていただきます。 > ■やりたいこと > サイトに検索フォームを用意したいと考えています。 > かつ、検索結果はBookMarkableにしたい。 > > ■現状 > フォームを設置すると、formのaction属性が「?wicket:interface=:22:form::IFormSubmitListener::」のように > なってしまいます。 > > これを Google のように /query?q=あああ&start=100 のような結果となるよう > action 属性を "/query" にしたいのですが、どうしたらいいですか。 > > > よろしくお願いします。 > _______________________________________________ > Wicket-ja-user mailing list > Wicke****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user