특정 URL에 액세스하는 사용자를 개찰 페이지로 리디렉션하고 페이지의 앵커로 스크롤해야합니다. 예를 들어 사용자는 http://.../target/url/123
에 직접 연결할 수 있습니다. 그런 다음 123
ID가 데이터베이스에서 조회됩니다. 이후 엔티티를 찾았는지 여부에 따라 사용자가 다른 페이지로 리디렉션됩니다.Wicket의 setResponsePage()에서 앵커를 추가하는 방법은 무엇입니까?
엔티티를 가져온 후에 사용자는 http://.../another/url/123#element123
으로 리디렉션되어야합니다. 어떻게 우리가 개찰판에서 이걸 얻을 수 있습니까? 페이지는 앵커없이 액세스 할 수 있어야하며 솔루션은 일반적이어야합니다. 내가 생각 해낸
하나 개의 솔루션은 PageParameters
가 anchor
라는 항목이 포함 된 경우 URL에 #anchor
를 추가하기 위해 PageParametersEncoder
논리를 무시하는 것입니다. 그러나 이것은 또한 앵커를 추가하기 위해 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' 매개 변수는'/ page/123? anchor = foo # foo'와 같이 URL에 표시됩니다. 또한 각 페이지에 코드를 추가해야하므로 매우 일반적이지 않습니다. – RJo
@rjokelai 나는 항상 내 응용 프로그램의 모든 페이지를 하위 클래스로 분류하는 기본 페이지를 가지고 있으므로 절대로 문제가되지 않습니다. 이 패턴은 앵커 매개 변수가 주석 ID이고 URL에 표시되도록하는 콘텐츠 페이지에서 문제가되지 않았습니다. 그러나 렌더링 시간 만 솔루션을 찾고 있다면 wicket6과 추가 # 문자를 추가하고 매개 변수 목록의 끝에 앵커 태그를 이동하는 사용자 정의 PageParameterEncoder를 사용하는 해결책이 유일한 옵션입니다. apache.issues.org의 기능 요청 티켓을 여는 것이 좋습니다. – cserepj
Wicket 1.5에서도'PageParametersEncoder'가 오버라이드 될 수 있다고 생각합니다. 이것은'MountedMapper'에 매개 변수로 전달되기 때문입니다. 나는 URL을 조금 더 못하게 만들지 만 자바 스크립트 솔루션과 함께 갈 것이라고 생각한다. :) – RJo