我们需要将访问特定URL的用户重定向到Wicket页面,并滚动到页面中的锚点。例如,用户直接链接到
在获取实体之后,用户应该被重定向到
我想到的一个解决方案是覆盖
有没有其他的解决方案?
http://.../target/url/123
。之后,从数据库中查找123
id。随后,根据实体是否被找到,将重定向用户到不同的页面。在获取实体之后,用户应该被重定向到
http://.../another/url/123#element123
。我们如何使用Wicket实现这一点?页面也应该可以不带锚点访问,并且最好是通用的解决方案。我想到的一个解决方案是覆盖
PageParametersEncoder
逻辑,当PageParameters
包含名为anchor
的条目时,在URL后附加#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;
}
}
}
有没有其他的解决方案?
anchor
参数在URL中可见,像/page/123?anchor=foo#foo
这样。此外,你需要在每个页面中添加代码,所以它并不是很通用。 - RJoPageParametersEncoder
,因为它作为参数传递给了MountedMapper
。虽然这会使URL变得有点丑陋,但我认为我们会选择JavaScript解决方案 :) - RJo