自定义AJAX URL

时间:2012-11-22 16:13:38

标签: wicket wicket-1.5 wicket-1.6

在我们的某个页面上,我们添加了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会话保持活动状态。

1 个答案:

答案 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中使用给定的固定前缀。