在我们的某个页面上,我们添加了AbstractAjaxTimerBehavior
(将潜在的新项目添加到Repeatingview
)。执行的AJAX调用如下:
https://.../home/?0-1.IBehaviorListener.0-filteredContentHandler&random=0.38872813899070024
但是,由于该随机部分,此URL不是静态的。我也不确定?0-1
是否总是一样的。
在Wicket 1.5或Wicket 6(我们可能升级到)中是否有办法为某个电话设置静态网址?
(此要求的原因是将此URL提供给Siteminder(SSO),以便SSO会话忽略这些URL以使SSO会话保持活动状态。
答案 0 :(得分:0)
回答我自己的问题:
public class AjaxTimerBehaviorMapper extends AbstractComponentMapper {
private final IRequestMapper wrappedMapper;
private final String prefix;
/**
* @param rootRequestMapper
*/
public AjaxTimerBehaviorMapper(IRequestMapper wrappedMapper, String prefix) {
this.wrappedMapper = wrappedMapper;
this.prefix = prefix;
}
@Override
public IRequestHandler mapRequest(Request request) {
Url url = request.getUrl();
if (url.getSegments().size() >= 1 && url.getSegments().get(0).equals(this.prefix)) {
url.removeLeadingSegments(1);
}
return this.wrappedMapper.mapRequest(request.cloneWithUrl(url));
}
@Override
public int getCompatibilityScore(Request request) {
return this.wrappedMapper.getCompatibilityScore(request);
}
@Override
public Url mapHandler(IRequestHandler requestHandler) {
Url url = this.wrappedMapper.mapHandler(requestHandler);
if (requestHandler instanceof ListenerInterfaceRequestHandler) {
ListenerInterfaceRequestHandler listenerInterfaceRequestHandler = (ListenerInterfaceRequestHandler) requestHandler;
RequestListenerInterface requestListenerInterface = listenerInterfaceRequestHandler.getListenerInterface();
if (requestListenerInterface != null) {
Class<? extends IRequestListener> listenerInterfaceClass = requestListenerInterface.getListenerInterfaceClass();
if (IBehaviorListener.class.isAssignableFrom(listenerInterfaceClass)) {
IRequestableComponent requestableComponent = listenerInterfaceRequestHandler.getComponent();
if (requestableComponent != null) {
Integer behaviorIndex = listenerInterfaceRequestHandler.getBehaviorIndex();
Behavior behavior = requestableComponent.getBehaviorById(behaviorIndex);
if (behavior != null) {
if (AbstractAjaxTimerBehavior.class.isAssignableFrom(behavior.getClass())
|| CustomAbstractAjaxTimerBehavior.class.isAssignableFrom(behavior.getClass())) {
url.prependLeadingSegments(newArrayList(this.prefix));
}
}
}
}
}
}
return url;
}
}
这样,wicket将在url中使用给定的固定前缀。