code: 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;
      }
docs: 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