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