code: public void addActionMapping( ActionModel mapping )
      {
          String mappingPath = mapping.getPath();
          ActionModel conflictingActionMapping = ( ActionModel ) _actionMappings.get( mappingPath );
          
          if ( conflictingActionMapping != null )
          {
              ActionModel defaultMappingForThisPath = conflictingActionMapping;
              
              //
              // If the new action mapping takes no form, then it has the highest precedence, and replaces the existing
              // "natural" mapping for the given path.  Otherwise, replace the existing one if the existing one has a
              // form bean and if the new mapping's form bean type comes alphabetically before the existing one's.
              //
              if ( mapping.getFormBeanName() == null
                   || ( conflictingActionMapping.getFormBeanName() != null
                        && getBeanType( mapping ).compareTo( getBeanType( conflictingActionMapping ) ) < 0 ) )
              {
                  _actionMappings.remove( mappingPath );
                  _actionMappings.put( mappingPath, mapping );
                  defaultMappingForThisPath = mapping;
                  conflictingActionMapping.setOverloaded( false );
                  addDisambiguatedActionMapping( conflictingActionMapping );
              }
              else
              {
                  addDisambiguatedActionMapping( mapping );
              }
              
              defaultMappingForThisPath.setOverloaded( true );
              defaultMappingForThisPath.setComment( DUPLICATE_ACTION_COMMENT.replaceAll( "\\{0\\}", mappingPath ) );  // @TODO I18N
          }
          else
          {
              _actionMappings.put( mappingPath, mapping );
          }
      }
docs: Adds a new ActionMapping to this StrutsApp.