code: protected void setStateAttribute(String name, String value, AbstractHtmlState tsh)
              throws JspException
      {
          boolean error = false;
  
          // validate the name attribute, in the case of an error simply return.
          if (name == null || name.length() <= 0) {
              String s = Bundle.getString("Tags_AttributeNameNotSet");
              registerTagError(s, null);
              error = true;
          }
  
          // it's not legal to set the id or name attributes this way
          if (name != null && (name.equals(ID) || name.equals(NAME))) {
              String s = Bundle.getString("Tags_AttributeMayNotBeSet", new Object[]{name});
              registerTagError(s, null);
          }
          if (error)
              return;
  
          // if there is a style or class we will let them override the base
          if (name.equals(CLASS)) {
              tsh.styleClass = value;
              return;
          }
          else if (name.equals(STYLE)) {
              tsh.style = value;
              return;
          }
          tsh.registerAttribute(AbstractHtmlState.ATTR_GENERAL, name, value);
      }
docs: Attribute implementation.
  @param name
  @param value
  @param tsh
  @throws JspException