Wicket 画面遷移を setResponsePage(Class , PageParameters) で行うとURLにパラメータがついてしまうのを避けるには、
・遷移先の WebPage は、IRequestablePage を implement する。
・遷移先の WebPageコンストラクタでPageParametersを受け取るようにして、
setResponsePageでインスタンス作成する。
・PageParametersEncoderでURLをそのまま返すものを用意して WebApplication で mount指定する
import org.apache.wicket.request.Url; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.request.mapper.parameter.PageParametersEncoder; /** * NoParamsPageParametersEncoder. */ public class NoParamsPageParametersEncoder extends PageParametersEncoder{ public NoParamsPageParametersEncoder(){ super(); } @Override public Url encodePageParameters(PageParameters pageParameters) { return new Url(); } }
遷移先WebPage
public class TestPage extends WebPage implements IRequestablePage{ public TestPage(PageParameters parameters){ int a = Optional.ofNullable(parameters.get("a").toOptionalInteger()).map(e->e.intValue()).orElse(0); String b = parameters.get("b").toOptionalString();
WebApplication で、
mount(new MountedMapper("/testpage", TestPage.class, new NoParamsPageParametersEncoder()));
呼出し側
queue(new Button("test").add(AjaxEventBehavior.onEvent("click", t->{ PageParameters parameters = new PageParameters(); parameters.add("a", 10); parameters.add("b", "Hello"); setResponsePage(new TestPage(parameters)); })));