gpt4 book ai didi

redirect - 如何在 Wicket 的 setResponsePage() 中添加 anchor ?

转载 作者:行者123 更新时间:2023-12-01 05:24:59 27 4
gpt4 key购买 nike

我们需要将访问特定 url 的用户重定向到 Wicket 页面并滚动到页面中的 anchor 。例如,用户直接链接到 http://.../target/url/123 .之后,123 id 是从数据库中查找的。随后,根据是否找到实体,用户将被重定向到不同的页面。

获取实体后,用户应重定向到 http://.../another/url/123#element123 .我们如何通过 Wicket 实现这一目标?该页面也应该可以在没有 anchor 的情况下访问,并且最好解决方案应该是通用的。

我想出的一个解决方案是覆盖 PageParametersEncoder追加逻辑 #anchor到 url 当 PageParameters包含一个名为 anchor 的条目.但是,这意味着我还需要扩展 Url用我自己的类来附加 anchor 。

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;
}
}
}

该问题还有其他解决方案吗?

最佳答案

以下代码将一个 javascript 片段呈现到目标页面的 html 中,在页面加载时,该片段会将页面聚焦在 url 中指定的 anchor 上。

@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
long anchor = getRequest().getQueryParameters().getParameterValue("anchor").toLong(0);
if (anchor > 0) {
response.render(new OnLoadHeaderItem("location.href='#anchor" + anchor + "';"));
anchor = 0;
}
}

顺便说一句,这是针对 wicket 6 的。尽管在 1.5 和以前的版本中,您可以做类似的事情。

关于redirect - 如何在 Wicket 的 setResponsePage() 中添加 anchor ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14436899/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com