我们需要将访问某个 url 的用户重定向到 Wicket 页面并滚动到页面中的锚点。例如,用户直接链接到http://.../target/url/123
. 之后,123
从数据库中查找 id。随后,将根据是否找到实体将用户重定向到不同的页面。
获取实体后,应将用户重定向到http://.../another/url/123#element123
. 我们如何使用 Wicket 实现这一目标?该页面也应该可以在没有锚点的情况下访问,并且最好的解决方案应该是通用的。
我想出的一种解决方案是PageParametersEncoder
在#anchor
包含PageParameters
名为anchor
. 但是,这意味着我还需Url
要用我自己的扩展类来附加锚点。
public class ExtendedEncoder extends PageParametersEncoder {
public static final String ANCHOR = "anchor";
@Override
public Url encodePageParameters(PageParameters pageParameters) {
Url fromSuper = super.encodePageParameters(pageParameters.remove(ANCHOR));
return new ExtendedUrl(fromSuper,
pageParameters.get(ANCHOR).toOptionalString());
}
}
public class ExtendedUrl extends Url {
private String anchor;
private ExtendedUrl(Url url, String anchor) {
super(url);
this.anchor = anchor;
}
@Override
public String toString(StringMode mode, Charset charset) {
return super.toString(mode, charset)
+ anchor == null ? "" : "#" + anchor;
}
}
}
该问题还有其他解决方案吗?