【问题标题】:Customize AJAX URL自定义 AJAX URL
【发布时间】:2012-11-22 16:13:38
【问题描述】:

在我们的一个页面上,我们添加了AbstractAjaxTimerBehavior(将潜在的新项目添加到Repeatingview)。执行的 AJAX 调用如下:

https://.../home/?0-1.IBehaviorListener.0-filteredContentHandler&random=0.38872813899070024

但是,由于随机部分,此 URL 不是静态的。我也不确定?0-1 是否总是一样的。

Wicket 1.5 或 Wicket 6(我们可能会升级到)有没有办法为某个呼叫设置静态 URL?


(此要求的原因是将此 URL 提供给 Siteminder (SSO),以便 SSO 会话忽略这些 URL 以保持 SSO 会话有效)。

【问题讨论】:

标签: wicket wicket-1.5 wicket-1.6


【解决方案1】:

回答我自己的问题:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 2017-06-16
    • 2014-03-18
    • 2023-01-27
    • 2022-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多