in myfaces-html5-core/src/main/java/org/apache/myfaces/html5/handler/DropTargetBehaviorHandler.java [164:270]
public void apply(FaceletContext faceletContext, UIComponent parent)
{
if (!ComponentHandler.isNew(parent))
{
if (log.isLoggable(Level.FINE))
log.fine("Component" + DebugUtils.getPathToComponent(parent)
+ " is not new, thus return without any operation.");
return;
}
if (parent instanceof ClientBehaviorHolder)
{
ClientBehaviorHolder holder = _getClientBehaviorHolder(parent);
FacesContext context = faceletContext.getFacesContext();
Application app = context.getApplication();
String behaviorId = getBehaviorId();
Behavior behavior = app.createBehavior(behaviorId);
if (!(behavior instanceof DropTargetBehavior))
{
throw new FacesException("Behavior is not a DropTargetBehavior");
}
// manually added all of the properties, so no need for this:
// setAttributes(faceletContext, behavior);
DropTargetBehavior dropTargetBehavior = (DropTargetBehavior) behavior;
if (_dropListener != null)
{
MethodExpression expr = _dropListener.getMethodExpression(faceletContext, Void.TYPE, new Class<?>[]
{
DropEvent.class
});
dropTargetBehavior.addDropTargetBehaviorListener(new DropListener(expr));
}
// see https://issues.apache.org/jira/browse/MYFACES-2616
// see the thread http://www.mail-archive.com/dev@myfaces.apache.org/msg46764.html
// using the same approach in DropSourceBehavior too... see there for explanation!
if (_action != null)
{
if (_action.isLiteral())
{
dropTargetBehavior.setAction(_action.getValue(faceletContext));
}
else
{
dropTargetBehavior.setValueExpression("action", _action.getValueExpression(faceletContext,
String.class));
}
}
if (_types != null)
{
if (_types.isLiteral())
{
dropTargetBehavior.setTypes(_types.getObject(faceletContext));
}
else
{
dropTargetBehavior.setValueExpression("types", _types.getValueExpression(faceletContext,
Object.class));
}
}
if (_acceptMimeTypes != null)
{
if (_acceptMimeTypes.isLiteral())
{
dropTargetBehavior.setAcceptMimeTypes(_acceptMimeTypes.getObject(faceletContext));
}
else
{
dropTargetBehavior.setValueExpression("acceptMimeTypes", _acceptMimeTypes.getValueExpression(
faceletContext, Object.class));
}
}
if (_rerender != null)
{
if (_rerender.isLiteral())
{
dropTargetBehavior.setRerender(_rerender.getObject(faceletContext));
}
else
{
dropTargetBehavior.setValueExpression("rerender", _rerender.getValueExpression(faceletContext,
Object.class));
}
}
holder.addClientBehavior(ClientBehaviorEvents.DRAGENTER_EVENT, dropTargetBehavior);
holder.addClientBehavior(ClientBehaviorEvents.DRAGOVER_EVENT, dropTargetBehavior);
holder.addClientBehavior(ClientBehaviorEvents.DROP_EVENT, dropTargetBehavior);
}
//XXX: try in a composite component!
/*
* else if (UIComponent.isCompositeComponent(parent)) { // COPIED FROM AjaxHandler! // It is supposed that for
* composite components, this tag should // add itself as a target, but note that on whole api does not exists
* // some tag that expose client behaviors as targets for composite // components. In RI, there exists a tag
* called composite:clientBehavior, // but does not appear on spec or javadoc, maybe because this could be //
* understand as an implementation detail, after all there exists a key // called
* AttachedObjectTarget.ATTACHED_OBJECT_TARGETS_KEY that could be // used to create a tag outside jsf
* implementation to attach targets. CompositeComponentResourceTagHandler.addAttachedObjectHandler(parent,
* this); }
*/
}