⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstractdefaultajaxbehavior.java

📁 Wicket一个开发Java Web应用程序框架。它使得开发web应用程序变得容易而轻松。 Wicket利用一个POJO data beans组件使得它可以与任何持久层技术相结合。
💻 JAVA
字号:
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements.  See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License.  You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.apache.wicket.ajax;import org.apache.wicket.Application;import org.apache.wicket.Component;import org.apache.wicket.RequestContext;import org.apache.wicket.RequestCycle;import org.apache.wicket.ResourceReference;import org.apache.wicket.behavior.AbstractAjaxBehavior;import org.apache.wicket.markup.html.IHeaderResponse;import org.apache.wicket.markup.html.WicketEventReference;import org.apache.wicket.markup.html.resources.JavascriptResourceReference;import org.apache.wicket.protocol.http.WebApplication;import org.apache.wicket.settings.IDebugSettings;import org.apache.wicket.util.string.AppendingStringBuffer;import org.apache.wicket.util.string.Strings;import org.apache.wicket.util.time.Duration;/** * The base class for Wicket's default AJAX implementation. *  * @since 1.2 *  * @author Igor Vaynberg (ivaynberg) *  */public abstract class AbstractDefaultAjaxBehavior extends AbstractAjaxBehavior{	private static final long serialVersionUID = 1L;	/** reference to the default indicator gif file. */	public static final ResourceReference INDICATOR = new ResourceReference(		AbstractDefaultAjaxBehavior.class, "indicator.gif");	/** reference to the default ajax debug support javascript file. */	private static final ResourceReference JAVASCRIPT_DEBUG = new JavascriptResourceReference(		AbstractDefaultAjaxBehavior.class, "wicket-ajax-debug.js");	/**	 * Subclasses should call super.onBind()	 * 	 * @see org.apache.wicket.behavior.AbstractAjaxBehavior#onBind()	 */	protected void onBind()	{		getComponent().setOutputMarkupId(true);	}	/**	 * @see org.apache.wicket.behavior.AbstractAjaxBehavior#renderHead(org.apache.wicket.markup.html.IHeaderResponse)	 */	public void renderHead(IHeaderResponse response)	{		super.renderHead(response);		final IDebugSettings debugSettings = Application.get().getDebugSettings();		response.renderJavascriptReference(WicketEventReference.INSTANCE);		response.renderJavascriptReference(WicketAjaxReference.INSTANCE);		if (debugSettings.isAjaxDebugModeEnabled())		{			response.renderJavascriptReference(JAVASCRIPT_DEBUG);			response.renderJavascript("wicketAjaxDebugEnable=true;", "wicket-ajax-debug-enable");		}		RequestContext context = RequestContext.get();		if (context.isPortletRequest())		{			response.renderJavascript("Wicket.portlet=true", "wicket-ajax-portlet-flag");		}	}	/**	 * @return ajax call decorator used to decorate the call generated by this behavior or null for	 *         none	 */	protected IAjaxCallDecorator getAjaxCallDecorator()	{		return null;	}	/**	 * @return javascript that will generate an ajax GET request to this behavior	 */	protected CharSequence getCallbackScript()	{		return getCallbackScript(false);	}	/**	 * @return javascript that will generate an ajax GET request to this behavior *	 * @param onlyTargetActivePage	 *            if true the callback to this behavior will be ignore if the page is not the last	 *            one the user accessed	 * 	 */	protected CharSequence getCallbackScript(boolean onlyTargetActivePage)	{		return generateCallbackScript("wicketAjaxGet('" + getCallbackUrl(onlyTargetActivePage) +			"'");	}	/**	 * @return an optional javascript expression that determines whether the request will actually	 *         execute (in form of return XXX;);	 */	protected CharSequence getPreconditionScript()	{		return "return Wicket.$('" + getComponent().getMarkupId() + "') != null;";	}	/**	 * @return javascript that will run when the ajax call finishes with an error status	 */	protected CharSequence getFailureScript()	{		return null;	}	/**	 * @return javascript that will run when the ajax call finishes successfully	 */	protected CharSequence getSuccessScript()	{		return null;	}	/**	 * Returns javascript that performs an ajax callback to this behavior. The script is decorated	 * by the ajax callback decorator from	 * {@link AbstractDefaultAjaxBehavior#getAjaxCallDecorator()}.	 * 	 * @param partialCall	 *            Javascript of a partial call to the function performing the actual ajax callback.	 *            Must be in format <code>function(params,</code> with signature	 *            <code>function(params, onSuccessHandler, onFailureHandler</code>. Example:	 *            <code>wicketAjaxGet('callbackurl'</code>	 * 	 * @return script that performs ajax callback to this behavior	 */	protected CharSequence generateCallbackScript(final CharSequence partialCall)	{		final CharSequence onSuccessScript = getSuccessScript();		final CharSequence onFailureScript = getFailureScript();		final CharSequence precondition = getPreconditionScript();		final IAjaxCallDecorator decorator = getAjaxCallDecorator();		String indicatorId = findIndicatorId();		CharSequence success = (onSuccessScript == null) ? "" : onSuccessScript;		CharSequence failure = (onFailureScript == null) ? "" : onFailureScript;		if (decorator != null)		{			success = decorator.decorateOnSuccessScript(success);		}		if (!Strings.isEmpty(indicatorId))		{			String hide = ";wicketHide('" + indicatorId + "');";			success = success + hide;			failure = failure + hide;		}		if (decorator != null)		{			failure = decorator.decorateOnFailureScript(failure);		}		AppendingStringBuffer buff = new AppendingStringBuffer(256);		buff.append("var ").append(IAjaxCallDecorator.WICKET_CALL_RESULT_VAR).append("=");		buff.append(partialCall);		if (success.length() == 0)		{			buff.append(",null");		}		else		{			buff.append(",function(){").append(success).append("}.bind(this)");		}		if (failure.length() == 0)		{			buff.append(",null");		}		else		{			buff.append(",function() { ").append(failure).append("}.bind(this)");		}		if (precondition != null)		{			buff.append(", function() {");			buff.append(precondition);			buff.append("}.bind(this)");		}		String channel = getChannelName();		if (channel != null)		{			if (precondition == null)			{				buff.append(", null");			}			buff.append(", '");			buff.append(channel);			buff.append("'");		}		buff.append(");");		CharSequence call = buff;		if (!Strings.isEmpty(indicatorId))		{			call = new AppendingStringBuffer("wicketShow('").append(indicatorId)				.append("');")				.append(call);		}		if (decorator != null)		{			call = decorator.decorateScript(call);		}		return call;	}	protected String getChannelName()	{		return null;	}	/**	 * 	 * @return String	 */	private String findIndicatorId()	{		if (getComponent() instanceof IAjaxIndicatorAware)		{			return ((IAjaxIndicatorAware)getComponent()).getAjaxIndicatorMarkupId();		}		if (this instanceof IAjaxIndicatorAware)		{			return ((IAjaxIndicatorAware)this).getAjaxIndicatorMarkupId();		}		Component parent = getComponent().getParent();		while (parent != null)		{			if (parent instanceof IAjaxIndicatorAware)			{				return ((IAjaxIndicatorAware)parent).getAjaxIndicatorMarkupId();			}			parent = parent.getParent();		}		return null;	}	/**	 * @see org.apache.wicket.behavior.IBehaviorListener#onRequest()	 */	public final void onRequest()	{		WebApplication app = (WebApplication)getComponent().getApplication();		AjaxRequestTarget target = app.newAjaxRequestTarget(getComponent().getPage());		RequestCycle.get().setRequestTarget(target);		respond(target);	}	/**	 * @param target	 *            The AJAX target	 */	// TODO rename this to onEvent or something? respond is mostly the same as	// onRender	// this is not the case this is still the event handling period. respond is	// called	// in the RequestCycle on the AjaxRequestTarget..	protected abstract void respond(AjaxRequestTarget target);	/**	 * Wraps the provided javascript with a throttled block. Throttled behaviors only execute once	 * within the given delay even though they are triggered multiple times.	 * <p>	 * For example, this is useful when attaching an event behavior to the onkeypress event. It is	 * not desirable to have an ajax call made every time the user types so we throttle that call to	 * a desirable delay, such as once per second. This gives us a near real time ability to provide	 * feedback without overloading the server with ajax calls.	 * 	 * @param script	 *            javascript to be throttled	 * @param throttleId	 *            the id of the throttle to be used. Usually this should remain constant for the	 *            same javascript block.	 * @param throttleDelay	 *            time span within which the javascript block will only execute once	 * @return wrapped javascript	 */	public static final CharSequence throttleScript(CharSequence script, String throttleId,		Duration throttleDelay)	{		if (Strings.isEmpty(script))		{			throw new IllegalArgumentException("script cannot be empty");		}		if (Strings.isEmpty(throttleId))		{			throw new IllegalArgumentException("throttleId cannot be empty");		}		if (throttleDelay == null)		{			throw new IllegalArgumentException("throttleDelay cannot be null");		}		return new AppendingStringBuffer("wicketThrottler.throttle( '").append(throttleId)			.append("', ")			.append(throttleDelay.getMilliseconds())			.append(", function() { ")			.append(script)			.append("});");	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -