Search in sources :

Example 1 with BehaviorHolderAttachedObjectTarget

use of javax.faces.view.BehaviorHolderAttachedObjectTarget in project primefaces by primefaces.

the class AbstractBehaviorHandler method apply.

@Override
public void apply(FaceletContext faceletContext, UIComponent parent) throws IOException {
    if (!ComponentHandler.isNew(parent)) {
        return;
    }
    String eventName = getEventName();
    if (UIComponent.isCompositeComponent(parent)) {
        boolean tagApplied = false;
        if (parent instanceof ClientBehaviorHolder) {
            applyAttachedObject(faceletContext, parent);
            tagApplied = true;
        }
        BeanInfo componentBeanInfo = (BeanInfo) parent.getAttributes().get(UIComponent.BEANINFO_KEY);
        if (null == componentBeanInfo) {
            throw new TagException(tag, "Composite component does not have BeanInfo attribute");
        }
        BeanDescriptor componentDescriptor = componentBeanInfo.getBeanDescriptor();
        if (null == componentDescriptor) {
            throw new TagException(tag, "Composite component BeanInfo does not have BeanDescriptor");
        }
        List<AttachedObjectTarget> targetList = (List<AttachedObjectTarget>) componentDescriptor.getValue(AttachedObjectTarget.ATTACHED_OBJECT_TARGETS_KEY);
        if (null == targetList && !tagApplied) {
            throw new TagException(tag, "Composite component does not support behavior events");
        }
        boolean supportedEvent = false;
        if (targetList != null) {
            for (int i = 0; i < targetList.size(); i++) {
                AttachedObjectTarget target = targetList.get(i);
                if (target instanceof BehaviorHolderAttachedObjectTarget) {
                    BehaviorHolderAttachedObjectTarget behaviorTarget = (BehaviorHolderAttachedObjectTarget) target;
                    if ((null != eventName && eventName.equals(behaviorTarget.getName())) || (null == eventName && behaviorTarget.isDefaultEvent())) {
                        supportedEvent = true;
                        break;
                    }
                }
            }
        }
        if (supportedEvent) {
            // Workaround to implementation specific composite component handlers
            FacesContext context = FacesContext.getCurrentInstance();
            PrimeEnvironment environment = PrimeApplicationContext.getCurrentInstance(context).getEnvironment();
            if (environment.isMojarra()) {
                addAttachedObjectHandlerToMojarra(environment, parent);
            } else {
                addAttachedObjectHandlerToMyFaces(parent, faceletContext);
            }
        } else {
            if (!tagApplied) {
                throw new TagException(tag, "Composite component does not support event " + eventName);
            }
        }
    } else if (parent instanceof ClientBehaviorHolder) {
        applyAttachedObject(faceletContext, parent);
    } else {
        throw new TagException(tag, "Unable to attach behavior to non-ClientBehaviorHolder parent");
    }
}
Also used : FacesContext(javax.faces.context.FacesContext) BehaviorHolderAttachedObjectTarget(javax.faces.view.BehaviorHolderAttachedObjectTarget) AttachedObjectTarget(javax.faces.view.AttachedObjectTarget) BeanInfo(java.beans.BeanInfo) BehaviorHolderAttachedObjectTarget(javax.faces.view.BehaviorHolderAttachedObjectTarget) ClientBehaviorHolder(javax.faces.component.behavior.ClientBehaviorHolder) BeanDescriptor(java.beans.BeanDescriptor) PrimeEnvironment(org.primefaces.config.PrimeEnvironment) ArrayList(java.util.ArrayList) List(java.util.List)

Aggregations

BeanDescriptor (java.beans.BeanDescriptor)1 BeanInfo (java.beans.BeanInfo)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 ClientBehaviorHolder (javax.faces.component.behavior.ClientBehaviorHolder)1 FacesContext (javax.faces.context.FacesContext)1 AttachedObjectTarget (javax.faces.view.AttachedObjectTarget)1 BehaviorHolderAttachedObjectTarget (javax.faces.view.BehaviorHolderAttachedObjectTarget)1 PrimeEnvironment (org.primefaces.config.PrimeEnvironment)1