2

私たちのページの1つに、AbstractAjaxTimerBehavior(潜在的な新しいアイテムをに追加するためにRepeatingview)を追加しました。実行されるAJAX呼び出しは次のとおりです。

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

ただし、ランダムな部分があるため、このURLは静的ではありません。?0-1いつも同じ かどうかもわかりません。

Wicket1.5またはWicket6(アップグレードする可能性があります)に特定の呼び出しの静的URLを設定する方法はありますか?


(この要件の理由は、このURLをSiteminder(SSO)に提供して、SSOセッションがこれらのURLを無視してSSOセッションを維持できるようにするためです)。

4

1 に答える 1

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

このように、ウィケットはURLで指定された固定プレフィックスを使用します。

于 2013-02-07T12:40:13.160 に答える