wffweb/src/main/java/com/webfirmframework/wffweb/tag/html/AbstractHtml.java
public boolean removeAttributes(final boolean updateClient,
            final String... attributeNames) {

        boolean removed = false;
        boolean listenerInvoked = false;
        final Lock lock = sharedObject.getLock(ACCESS_OBJECT).writeLock();
        try {
            lock.lock();

            if (attributesMap == null) {
                return false;
            }

            for (final String attributeName : attributeNames) {

                final AbstractAttribute attribute = attributesMap
                        .get(attributeName);

                if (attribute != null) {
                    attribute.unsetOwnerTag(this);
                    attributesMap.remove(attributeName);
                    removed = true;
                }

            }

            if (removed) {
                attributes = new AbstractAttribute[attributesMap.size()];
                attributesMap.values().toArray(attributes);
                setModified(true);
                sharedObject.setChildModified(true);

                // invokeListener
                if (updateClient) {
                    final AttributeRemoveListener listener = sharedObject
                            .getAttributeRemoveListener(ACCESS_OBJECT);
                    if (listener != null) {
                        final AttributeRemoveListener.RemovedEvent event = new AttributeRemoveListener.RemovedEvent(
                                this, attributeNames);

                        listener.removedAttributes(event);
                        listenerInvoked = true;
                    }
                }
            }
        } finally {
            lock.unlock();
        }

        if (listenerInvoked) {
            final PushQueue pushQueue = sharedObject
                    .getPushQueue(ACCESS_OBJECT);
            if (pushQueue != null) {
                pushQueue.push();
            }
        }

        return removed;
    }
public boolean removeAttributes(final boolean updateClient,
            final String... attributeNames) {

        boolean removed = false;
        boolean listenerInvoked = false;
        final Lock lock = sharedObject.getLock(ACCESS_OBJECT).writeLock();
        try {
            lock.lock();

            if (attributesMap == null) {
                return false;
            }

            for (final String attributeName : attributeNames) {

                final AbstractAttribute attribute = attributesMap
                        .get(attributeName);

                if (attribute != null) {
                    attribute.unsetOwnerTag(this);
                    attributesMap.remove(attributeName);
                    removed = true;
                }

            }

            if (removed) {
                attributes = new AbstractAttribute[attributesMap.size()];
                attributesMap.values().toArray(attributes);
                setModified(true);
                sharedObject.setChildModified(true);

                // invokeListener
                if (updateClient) {
                    final AttributeRemoveListener listener = sharedObject
                            .getAttributeRemoveListener(ACCESS_OBJECT);
                    if (listener != null) {
                        final AttributeRemoveListener.RemovedEvent event = new AttributeRemoveListener.RemovedEvent(
                                this, attributeNames);

                        listener.removedAttributes(event);
                        listenerInvoked = true;
                    }
                }
            }
        } finally {
            lock.unlock();
        }

        if (listenerInvoked) {
            final PushQueue pushQueue = sharedObject
                    .getPushQueue(ACCESS_OBJECT);
            if (pushQueue != null) {
                pushQueue.push();
            }
        }

        return removed;
    }
public boolean removeAttributes ( final boolean updateClient , final String ... attributeNames ) { boolean removed = false ; boolean listenerInvoked = false ; final Lock lock = sharedObject . getLock ( ACCESS_OBJECT ) . writeLock ( ) ; try { lock . lock ( ) ; if ( attributesMap == null ) { return false ; } for ( final String attributeName : attributeNames ) { final AbstractAttribute attribute = attributesMap . get ( attributeName ) ; if ( attribute != null ) { attribute . unsetOwnerTag ( this ) ; attributesMap . remove ( attributeName ) ; removed = true ; } } if ( removed ) { attributes = new AbstractAttribute [ attributesMap . size ( ) ] ; attributesMap . values ( ) . toArray ( attributes ) ; setModified ( true ) ; sharedObject . setChildModified ( true ) ; // invokeListener if ( updateClient ) { final AttributeRemoveListener listener = sharedObject . getAttributeRemoveListener ( ACCESS_OBJECT ) ; if ( listener != null ) { final AttributeRemoveListener . RemovedEvent event = new AttributeRemoveListener . RemovedEvent ( this , attributeNames ) ; listener . removedAttributes ( event ) ; listenerInvoked = true ; } } } } finally { lock . unlock ( ) ; } if ( listenerInvoked ) { final PushQueue pushQueue = sharedObject . getPushQueue ( ACCESS_OBJECT ) ; if ( pushQueue != null ) { pushQueue . push ( ) ; } } return removed ; }
removes the given attributes from this tag.

@param updateClient
true to update client browser page if it is
available. The default value is true but it
will be ignored if there is no client browser
page.
@param attributeNames
to remove the attributes having in the given
names.
@return true if any of the attributes are removed.
@since 2.0.0 initial implementation
@since 2.0.15 changed to public scope
@author WFF
removes the given attributes from this tag .