diff --git a/jsf/tests/org.eclipse.jst.jsf.contentassist.tests/src/org/eclipse/jst/jsf/contentassist/tests/AllTests.java b/jsf/tests/org.eclipse.jst.jsf.contentassist.tests/src/org/eclipse/jst/jsf/contentassist/tests/AllTests.java
index 253cb18..b664f7d 100644
--- a/jsf/tests/org.eclipse.jst.jsf.contentassist.tests/src/org/eclipse/jst/jsf/contentassist/tests/AllTests.java
+++ b/jsf/tests/org.eclipse.jst.jsf.contentassist.tests/src/org/eclipse/jst/jsf/contentassist/tests/AllTests.java
@@ -28,8 +28,8 @@
         TestSuite suite = new TestSuite("Test for org.eclipse.jst.jsf.contentassist");
         //$JUnit-BEGIN$
         suite.addTestSuite(CompletionPrefixTest.class);
-//        suite.addTestSuite(Test_bug_149224.class);
-//        suite.addTestSuite(Test_bug_149743.class);
+        suite.addTestSuite(Test_bug_149224.class);
+        suite.addTestSuite(Test_bug_149743.class);
         //$JUnit-END$
         return suite;
     }
diff --git a/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/AllTests.java b/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/AllTests.java
index 55b642b..d7a5296 100644
--- a/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/AllTests.java
+++ b/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/AllTests.java
@@ -13,6 +13,7 @@
 import junit.framework.Test;
 import junit.framework.TestSuite;
 
+import org.eclipse.jst.jsf.core.tests.appconfig.validation.AppConfigValidationUtilTestCase;
 import org.eclipse.jst.jsf.core.tests.jsflibraryconfig.JSFLibraryConfigDialogSettingDataTestCases;
 import org.eclipse.jst.jsf.core.tests.jsflibraryconfig.JSFLibraryConfigModelTestCases;
 import org.eclipse.jst.jsf.core.tests.jsflibraryconfig.JSFLibraryRegistryUtilTestCases;
@@ -25,10 +26,16 @@
 import org.eclipse.jst.jsf.core.tests.jsflibraryregistry.MaintainDefaultImplementationAdapterTestCases;
 import org.eclipse.jst.jsf.core.tests.jsflibraryregistry.migration.MigrationV1toV2Test;
 import org.eclipse.jst.jsf.core.tests.project.facet.JSFFacetInstallDataModelProviderTestCases;
+import org.eclipse.jst.jsf.core.tests.set.ConcreteAxiomaticSetTest;
+import org.eclipse.jst.jsf.core.tests.set.NodeSetTest;
+import org.eclipse.jst.jsf.core.tests.set.TestMemberConstraint;
+import org.eclipse.jst.jsf.core.tests.set.TestXPathValidation;
+import org.eclipse.jst.jsf.core.tests.tagmatcher.TestXPathTagMatcher;
 import org.eclipse.jst.jsf.core.tests.types.TypeComparatorTests;
 import org.eclipse.jst.jsf.core.tests.types.TypeTransformerTests;
 import org.eclipse.jst.jsf.core.tests.util.TestJDTBeanIntrospector;
 import org.eclipse.jst.jsf.core.tests.util.TestJDTBeanPropertyWorkingCopy;
+import org.eclipse.jst.jsf.core.tests.util.TestTypeUtil;
 import org.eclipse.jst.jsf.core.tests.validation.TestJSPSemanticsValidator;
 
 /**
@@ -46,6 +53,7 @@
 		//$JUnit-BEGIN$
         suite.addTestSuite(TestJDTBeanPropertyWorkingCopy.class);
         suite.addTestSuite(TestJDTBeanIntrospector.class);
+        suite.addTestSuite(TestTypeUtil.class);
 
 		suite.addTestSuite(TypeComparatorTests.class);
 		suite.addTestSuite(TypeTransformerTests.class);
@@ -67,6 +75,12 @@
 		suite.addTestSuite(JSFLibraryRegistryUtilTestCases.class);
 
 		suite.addTestSuite(TestJSPSemanticsValidator.class);
+		suite.addTestSuite(AppConfigValidationUtilTestCase.class);
+		suite.addTestSuite(TestMemberConstraint.class);
+		suite.addTestSuite(TestXPathValidation.class);
+		suite.addTestSuite(TestXPathTagMatcher.class);
+		suite.addTestSuite(ConcreteAxiomaticSetTest.class);
+		suite.addTestSuite(NodeSetTest.class);
 		
         // NOTE: migration tests affect workspace meta-data files, but they
         // should play nice with others
diff --git a/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/set/ConcreteAxiomaticSetTest.java b/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/set/ConcreteAxiomaticSetTest.java
new file mode 100644
index 0000000..5757772
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/set/ConcreteAxiomaticSetTest.java
@@ -0,0 +1,153 @@
+package org.eclipse.jst.jsf.core.tests.set;
+
+import junit.framework.TestCase;
+
+import org.eclipse.jst.jsf.common.sets.AxiomaticSet;
+import org.eclipse.jst.jsf.common.sets.ConcreteAxiomaticSet;
+
+public class ConcreteAxiomaticSetTest extends TestCase 
+{
+	AxiomaticSet  	_primaryColours;
+	AxiomaticSet	_secondaryColours;
+	AxiomaticSet	_allMainColours;
+	
+	AxiomaticSet	_palette;
+	AxiomaticSet	_overlappingSet;
+	AxiomaticSet    _emptySet;
+	
+	@Override
+	protected void setUp() throws Exception 
+	{
+		super.setUp();
+		
+		// make concreteSet1 disjoint with concreteSet2 and non-disjoint with concrete3
+		
+		_emptySet = new ConcreteAxiomaticSet();
+		
+		_primaryColours = new ConcreteAxiomaticSet();
+		_primaryColours.add("blue");
+		_primaryColours.add("red");
+		_primaryColours.add("yellow");
+
+		_secondaryColours = new ConcreteAxiomaticSet();
+		_secondaryColours.add("green");
+		_secondaryColours.add("purple");
+		_secondaryColours.add("orange");
+		
+		_allMainColours = new ConcreteAxiomaticSet();
+		_allMainColours.add("blue");
+		_allMainColours.add("red");
+		_allMainColours.add("yellow");
+		_allMainColours.add("green");
+		_allMainColours.add("purple");
+		_allMainColours.add("orange");
+		
+		_palette = new ConcreteAxiomaticSet();
+		_palette.add("blue");
+		_palette.add("green");
+		_palette.add("burgundy");
+		
+		_overlappingSet = new ConcreteAxiomaticSet();
+		_overlappingSet.add("blue");
+		_overlappingSet.add("red");
+		_overlappingSet.add("yellow");
+		_overlappingSet.add("green");
+		_overlappingSet.add("purple");
+		_overlappingSet.add("burgundy");
+	}
+
+	@Override
+	protected void tearDown() throws Exception 
+	{
+		super.tearDown();
+		
+		_primaryColours = null;
+		_secondaryColours = null;
+		_palette = null;
+		_emptySet = null;
+	}
+
+	public void testIntersect() 
+	{
+		// intersect the empty is set an identity
+		assertTrue(_primaryColours.intersect(_secondaryColours).isEmpty());
+		
+		// non-disjoint intersection not empty
+		assertFalse(_primaryColours.intersect(_palette).isEmpty());
+		assertEquals(1, _primaryColours.intersect(_palette).size());
+		assertEquals("blue", _primaryColours.intersect(_palette).getFirstElement());
+
+		// intersection is commutative
+		assertEquals(_primaryColours.intersect(_palette), _palette.intersect(_primaryColours));
+		//intersection is associative
+		assertEquals(_primaryColours.intersect(_overlappingSet).intersect(_palette)
+					, _overlappingSet.intersect(_palette).intersect(_primaryColours));		
+		
+		// intersection of disjoint sets are empty
+		assertTrue(_primaryColours.intersect(_secondaryColours).isEmpty());
+		
+		// intersection of subset of a set with the set is the subset
+		assertEquals(_primaryColours, _allMainColours.intersect(_primaryColours));
+		assertEquals(_secondaryColours, _allMainColours.intersect(_secondaryColours));
+	}
+
+	public void testIsEquivalent() 
+	{
+		// identity: a set is equal to itself
+		assertTrue(_primaryColours.isEquivalent(_primaryColours));
+		
+		// two unequal sets are not equivalent
+		assertFalse(_primaryColours.isEquivalent(_secondaryColours));
+	}
+
+	public void testUnion() 
+	{
+		// union with empty is identity
+		assertEquals(_primaryColours, _primaryColours.union(_emptySet));
+		
+		// primary and secondary union to allMain
+		assertEquals(_allMainColours, _primaryColours.union(_secondaryColours));
+		
+		// union is commutative
+		assertEquals(_primaryColours.union(_secondaryColours)
+				    , _secondaryColours.union(_primaryColours));
+		// union is associative
+		assertEquals(_primaryColours.union(_secondaryColours).union(_overlappingSet), 
+						_secondaryColours.union(_overlappingSet).union(_primaryColours));
+	}
+
+	public void testIsDisjoint() {
+		// primary colours and secondary have no common elements
+		assertTrue(_primaryColours.isDisjoint(_secondaryColours));
+		
+		// all sets are disjoint with the empty set
+		assertTrue(_primaryColours.isDisjoint(_emptySet));
+		assertTrue(_secondaryColours.isDisjoint(_emptySet));
+		assertTrue(_emptySet.isDisjoint(_allMainColours));
+		
+		// subset is not disjoint with set
+		assertFalse(_primaryColours.isDisjoint(_allMainColours));
+	}
+
+	public void testGetFirstElement() 
+	{
+		// TODO:
+	}
+
+	public void testSubtract() {
+		// A - B = A if A and B are disjoint
+		assertEquals(_primaryColours, _primaryColours.subtract(_secondaryColours));
+		
+		// A - B = C where A = B U C and B and C are disjoint
+		assertEquals(_secondaryColours, _allMainColours.subtract(_primaryColours));
+		assertEquals(_primaryColours, _allMainColours.subtract(_secondaryColours));
+		
+		// A - B = A if B is empty
+		assertEquals(_secondaryColours, _secondaryColours.subtract(_emptySet));
+		
+		AxiomaticSet remainder = _allMainColours.subtract(_overlappingSet);
+		assertEquals(1, remainder.size());
+		assertTrue(remainder.contains("orange"));
+	}
+
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/set/NodeSetTest.java b/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/set/NodeSetTest.java
new file mode 100644
index 0000000..9dd0910
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/set/NodeSetTest.java
@@ -0,0 +1,131 @@
+package org.eclipse.jst.jsf.core.tests.set;
+
+import org.eclipse.jst.jsf.common.sets.AxiomaticSet;
+import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
+import org.eclipse.jst.jsf.core.set.mapping.ElementToTagIdentifierMapping;
+import org.eclipse.jst.jsf.core.tagmatcher.XPathMatchingAlgorithm;
+import org.eclipse.jst.jsf.core.tests.tagmatcher.BaseTagMatcherTestCase;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
+import org.w3c.dom.Document;
+
+public class NodeSetTest extends BaseTagMatcherTestCase 
+{
+	private AxiomaticSet  _ancestorsOfInputText;
+	private AxiomaticSet  _ancestorsOfCommandButton;
+	private AxiomaticSet  _ancestorsOfOutputText;
+	private AxiomaticSet  _inputTextSingletonSet;
+	
+	@Override
+	protected void setUp() throws Exception 
+	{
+        _srcFileName = "/testfiles/jsps/testdata1.jsp.data";
+        _destFileName = "/testdata1.jsp";
+        
+		super.setUp();
+		
+		_ancestorsOfInputText = getAncestorsOf("/view/html/body/form/panelGrid/inputText", 5);
+		_ancestorsOfCommandButton = getAncestorsOf("/view/html/body/form/commandButton", 4);
+		_ancestorsOfOutputText = getAncestorsOf("/view/html/body/form/h1/outputText", 5);
+		
+		Document doc = ((IDOMModel)_structuredModel).getDocument();
+        XPathMatchingAlgorithm matcher = new XPathMatchingAlgorithm("/view/html/body/form/panelGrid/inputText");
+        _inputTextSingletonSet = matcher.evaluate(doc);
+        assertEquals(1, _inputTextSingletonSet.size());
+	}
+
+	@Override
+	protected void tearDown() throws Exception 
+	{
+		super.tearDown();
+	}
+
+	public void testIntersect() 
+	{
+		AxiomaticSet set1 = 
+			_ancestorsOfInputText.intersect(_ancestorsOfCommandButton);
+		set1 = new ElementToTagIdentifierMapping().map(set1);
+		assertEquals(4, set1.size());
+		assertTrue(set1.contains(IJSFConstants.TAG_IDENTIFIER_FORM));
+		assertTrue(set1.contains(IJSFConstants.TAG_IDENTIFIER_VIEW));
+		// should not contain panelgrid because command button not in it
+		assertFalse(set1.contains(IJSFConstants.TAG_IDENTIFIER_PANEL_GRID));
+		
+		AxiomaticSet set2 =
+			_ancestorsOfOutputText.intersect(_ancestorsOfCommandButton);
+		set2 = new ElementToTagIdentifierMapping().map(set2);
+		assertEquals(4, set2.size());
+		assertTrue(set2.contains(IJSFConstants.TAG_IDENTIFIER_FORM));
+		assertTrue(set2.contains(IJSFConstants.TAG_IDENTIFIER_VIEW));
+		
+		// result is same as command button's ancestors, but output text
+		// has an additional h1 ancestor
+		assertFalse(set2.equals(new ElementToTagIdentifierMapping().map(_ancestorsOfOutputText)));
+		assertTrue(set2.equals(new ElementToTagIdentifierMapping().map(_ancestorsOfCommandButton)));
+	}
+
+	public void testIsEquivalent() throws Exception
+	{
+		// this == compareTo
+		assertTrue(_ancestorsOfInputText.isEquivalent(_ancestorsOfInputText));
+		
+		// this._data == compareTo._data
+		//assertTrue(_ancestorsOfInputText.isEquivalent((AxiomaticSet) ((NodeSet)_ancestorsOfInputText).clone()));
+		
+		// this.size() != compareTo.size();
+		assertFalse(_ancestorsOfInputText.isEquivalent(_ancestorsOfCommandButton));
+		
+		// this.size() == compareTo.size() but contents not same
+		assertFalse(_ancestorsOfInputText.isEquivalent(_ancestorsOfOutputText));
+		
+		// this.size() == compareTo.size() AND contents same
+		assertTrue(_ancestorsOfInputText.isEquivalent(getAncestorsOf("/view/html/body/form/panelGrid/inputText", -1)));
+	}
+
+	public void testUnion() 
+	{
+		AxiomaticSet set1 = 
+			_ancestorsOfInputText.union(_ancestorsOfCommandButton);
+		set1 = new ElementToTagIdentifierMapping().map(set1);
+		assertEquals(5, set1.size());
+		assertTrue(set1.contains(IJSFConstants.TAG_IDENTIFIER_FORM));
+		assertTrue(set1.contains(IJSFConstants.TAG_IDENTIFIER_VIEW));
+		assertTrue(set1.contains(IJSFConstants.TAG_IDENTIFIER_PANEL_GRID));
+		
+		AxiomaticSet set2 =
+			_ancestorsOfOutputText.union(_ancestorsOfCommandButton);
+		set2 = new ElementToTagIdentifierMapping().map(set2);
+		assertEquals(5, set2.size());
+		assertTrue(set2.contains(IJSFConstants.TAG_IDENTIFIER_FORM));
+		assertTrue(set2.contains(IJSFConstants.TAG_IDENTIFIER_VIEW));
+		assertFalse(set2.contains(IJSFConstants.TAG_IDENTIFIER_PANEL_GRID));
+	}
+
+	public void testIsDisjoint() 
+	{
+		assertFalse(_ancestorsOfInputText.isDisjoint(_ancestorsOfCommandButton));
+		assertFalse(_ancestorsOfInputText.isDisjoint(_ancestorsOfOutputText));
+		assertFalse(_ancestorsOfInputText.isDisjoint(_ancestorsOfInputText));
+		
+		assertTrue(_ancestorsOfInputText.isDisjoint(_inputTextSingletonSet));
+		assertTrue(_ancestorsOfOutputText.isDisjoint(_inputTextSingletonSet));
+		assertTrue(_ancestorsOfCommandButton.isDisjoint(_inputTextSingletonSet));
+	}
+
+	public void testSubtract() 
+	{
+		// the only non-common parent is the panel grid
+		AxiomaticSet  set1 = _ancestorsOfInputText.subtract(_ancestorsOfCommandButton);
+		set1 = new ElementToTagIdentifierMapping().map(set1);
+		assertEquals(1, set1.size());
+		assertTrue(set1.contains(IJSFConstants.TAG_IDENTIFIER_PANEL_GRID));
+		
+		// all of command button's parents are also parents of inputText
+		set1 = _ancestorsOfCommandButton.subtract(_ancestorsOfInputText);
+		set1 = new ElementToTagIdentifierMapping().map(set1);
+		assertEquals(0, set1.size());
+		
+		// no common elements
+		set1 = _ancestorsOfCommandButton.subtract(_inputTextSingletonSet);
+		assertEquals(_ancestorsOfCommandButton, set1);
+	}
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/set/TestElementToTagIdentifierMapping.java b/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/set/TestElementToTagIdentifierMapping.java
index cf8b170..2c6438e 100644
--- a/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/set/TestElementToTagIdentifierMapping.java
+++ b/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/set/TestElementToTagIdentifierMapping.java
@@ -14,7 +14,8 @@
 
 public class TestElementToTagIdentifierMapping extends BaseTagMatcherTestCase
 {
-    protected void setUp() throws Exception {
+    protected void setUp() throws Exception 
+    {
         _srcFileName = "/testfiles/jsps/testdata1.jsp.data";
         _destFileName = "/testdata1.jsp";
         super.setUp();
diff --git a/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/set/TestXPathValidation.java b/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/set/TestXPathValidation.java
index ff8ebc2..b61e16d 100644
--- a/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/set/TestXPathValidation.java
+++ b/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/set/TestXPathValidation.java
@@ -24,11 +24,13 @@
 
 public class TestXPathValidation extends BaseTagMatcherTestCase {
 
-    protected void setUp() throws Exception {
+    protected void setUp() throws Exception 
+    {
         _srcFileName = "/testfiles/jsps/testdata1.jsp.data";
         _destFileName = "/testdata1.jsp";
+        
         super.setUp();
-    }
+   }
 
     public void testValidateParentMembership()
     {
@@ -47,7 +49,7 @@
         
         // test a constraint set that isn't satisfied: no ancestor is inputLabel
         constraintSet.clear();
-        constraintSet.add(TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_HTML, "form"));
+        constraintSet.add(TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_HTML, "inputLabel"));
         memberConstraint = new MemberConstraint(constraintSet);
         assertTrue(memberConstraint.failsConstraint(inputAncestors));
     }
diff --git a/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/tagmatcher/BaseTagMatcherTestCase.java b/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/tagmatcher/BaseTagMatcherTestCase.java
index 06c7998..4e7d89d 100644
--- a/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/tagmatcher/BaseTagMatcherTestCase.java
+++ b/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/tagmatcher/BaseTagMatcherTestCase.java
@@ -13,13 +13,20 @@
 import junit.framework.TestCase;
 
 import org.eclipse.core.resources.IFile;
+import org.eclipse.jst.jsf.common.sets.AxiomaticSet;
+import org.eclipse.jst.jsf.core.IJSFCoreConstants;
+import org.eclipse.jst.jsf.core.tagmatcher.XPathMatchingAlgorithm;
 import org.eclipse.jst.jsf.core.tests.TestsPlugin;
+import org.eclipse.jst.jsf.core.tests.util.JSFFacetedTestEnvironment;
 import org.eclipse.jst.jsf.test.util.JDTTestEnvironment;
 import org.eclipse.jst.jsf.test.util.JSFTestUtil;
 import org.eclipse.jst.jsf.test.util.WebProjectTestEnvironment;
 import org.eclipse.wst.sse.core.StructuredModelManager;
 import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
 import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
 
 
 
@@ -65,16 +72,31 @@
         
         _testEnv = new WebProjectTestEnvironment("ELValidationTest_"+this.getClass().getName()+"_"+getName());
         _testEnv.createProject(false);
-        assertNotNull(_testEnv);       
+        assertNotNull(_testEnv);
         assertNotNull(_testEnv.getTestProject());
         assertTrue(_testEnv.getTestProject().isAccessible());
 
+        // load a dummy tld for core
+        // NOTE: the TLDs seem to need to be loaded BEFORE any JSPs that use them.
+        // probably adding the jsp kicks off something that searches for TLD's that doesn't
+        // get kicked if the TLDs are added after.
+        _testEnv.loadResourceInWebRoot(TestsPlugin.getDefault().getBundle()
+    			, "/testfiles/myfaces_core.tld.data", "META-INF/myfaces_core.tld");
+
+        _testEnv.loadResourceInWebRoot(TestsPlugin.getDefault().getBundle()
+    			, "/testfiles/myfaces_html.tld.data", "META-INF/myfaces_html.tld");
+
         _testJSP = (IFile) _testEnv.loadResourceInWebRoot
             (TestsPlugin.getDefault().getBundle(),
                     _srcFileName, _destFileName);
 
         _structuredModel = StructuredModelManager.getModelManager().getModelForRead(_testJSP);
         _structuredDocument = _structuredModel.getStructuredDocument();
+        
+        // 	initialize test case for faces 1.1
+        JSFFacetedTestEnvironment jsfFacedEnv = new JSFFacetedTestEnvironment(_testEnv);
+        jsfFacedEnv.initialize(IJSFCoreConstants.FACET_VERSION_1_1);
+
     }
     
     protected void tearDown() throws Exception 
@@ -87,5 +109,26 @@
         }
         _testEnv.getTestProject().close(null);
     }
+    
+    protected final AxiomaticSet getAncestorsOf(String xpathToChild, int expectedAncestors)
+    {
+        Document doc = ((IDOMModel)_structuredModel).getDocument();
+        XPathMatchingAlgorithm matcher = new XPathMatchingAlgorithm(xpathToChild);
+        AxiomaticSet  set = matcher.evaluate(doc);
+        assertEquals(1, set.size());
+     
+        // get all of the ancestors of the inputText
+        final Node inputText = (Node) set.getFirstElement();
+        matcher = new XPathMatchingAlgorithm("ancestor::*");
+        AxiomaticSet result =  matcher.evaluate(inputText);
 
+        assertNotNull(result);
+
+        if (expectedAncestors >= 0)
+        {
+        	assertEquals(expectedAncestors, result.size());
+        }
+
+        return result;
+    }
 }
diff --git a/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/tagmatcher/TestXPathTagMatcher.java b/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/tagmatcher/TestXPathTagMatcher.java
index 3e28088..1a83d70 100644
--- a/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/tagmatcher/TestXPathTagMatcher.java
+++ b/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/tagmatcher/TestXPathTagMatcher.java
@@ -12,10 +12,18 @@
 
 import java.util.Iterator;
 
+import org.eclipse.jst.jsf.common.dom.TagIdentifier;
 import org.eclipse.jst.jsf.common.sets.AxiomaticSet;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IDOMContextResolver;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory;
+import org.eclipse.jst.jsf.core.internal.tld.CMUtil;
+import org.eclipse.jst.jsf.core.set.mapping.ElementToTagIdentifierMapping;
 import org.eclipse.jst.jsf.core.tagmatcher.XPathMatchingAlgorithm;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
 import org.w3c.dom.Document;
+import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 
 
@@ -38,7 +46,15 @@
         
         // get an input nested along a form path
         assertEquals(1, set.size());
-        Node node = (Node) set.getFirstElement();
+		IStructuredDocumentContext context =
+			IStructuredDocumentContextFactory.INSTANCE
+				.getContext(_structuredDocument, 544);
+		IDOMContextResolver resolver = 
+			IStructuredDocumentContextResolverFactory.INSTANCE
+				.getDOMContextResolver(context);
+
+        Node node = resolver.getNode();//(Node) set.getFirstElement();
+        System.out.println(CMUtil.getElementNamespaceURI((Element) node));
         XPathMatchingAlgorithm  matcher = new XPathMatchingAlgorithm("html/body/form/panelGrid/inputText");
         set = matcher.evaluate(node);
         System.out.println(System.currentTimeMillis());
@@ -46,13 +62,18 @@
         
         // get all of the ancestors of the inputText
         final Node inputText = (Node) set.getFirstElement();
+        System.out.println(CMUtil.getElementNamespaceURI((Element) inputText));
         matcher = new XPathMatchingAlgorithm("ancestor::*");
         set = matcher.evaluate(inputText);
         assertEquals(5,set.size());
-        
+
+        set = new ElementToTagIdentifierMapping().map(set);
+
         for (final Iterator it = set.iterator(); it.hasNext();)
         {
-            System.out.println(it.next());
+        	TagIdentifier tagId = (TagIdentifier) it.next();
+        	System.out.println(tagId.getUri());
+            System.out.println(tagId.getTagName());
         }
     }
 }
diff --git a/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/util/TestTypeUtil.java b/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/util/TestTypeUtil.java
index 4871538..0811bb0 100644
--- a/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/util/TestTypeUtil.java
+++ b/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/util/TestTypeUtil.java
@@ -11,14 +11,14 @@
  ********************************************************************************/
 package org.eclipse.jst.jsf.core.tests.util;
 
-import java.util.Map;
+import java.util.ArrayList;
+import java.util.List;
 
 import junit.framework.TestCase;
 
+import org.eclipse.jdt.core.IMethod;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jst.jsf.common.internal.types.TypeConstants;
-import org.eclipse.jst.jsf.common.util.JDTBeanIntrospector;
-import org.eclipse.jst.jsf.common.util.JDTBeanProperty;
 import org.eclipse.jst.jsf.common.util.TypeUtil;
 import org.eclipse.jst.jsf.core.tests.TestsPlugin;
 import org.eclipse.jst.jsf.test.util.JDTTestEnvironment;
@@ -32,9 +32,11 @@
     private IType                                   _testBean1Type;
     private IType                                   _testBeanSubclassType;
     private IType                                   _testBeanGenericType;
-    private Map<String, JDTBeanProperty>            _properties;
-    private Map<String, JDTBeanProperty>            _subClassProperties;
-    private Map<String, JDTBeanProperty>            _genericTypeProperties;
+    private IType									_testEnum1Type;
+   
+//    private Map<String, JDTBeanProperty>            _properties;
+//    private Map<String, JDTBeanProperty>            _subClassProperties;
+//    private Map<String, JDTBeanProperty>            _genericTypeProperties;
 
     private final static String srcFolderName = "src";
     private final static String packageName1 = "com.test";
@@ -42,6 +44,8 @@
     private final static String testBeanSubclassName1 = "TestBean1Subclass";
     private final static String testAnotherBeanName = "AnotherBean";
     private final static String testBeanGenericName = "TestBeanGeneric";
+    private final static String testEnumName1 = "TestEnum1";
+    //private final static String testEnumName2 = "TestEnum2";
 
     protected void setUp() throws Exception {
         super.setUp();
@@ -89,21 +93,31 @@
 
         _testBeanGenericType = _jdtTestEnvironment.getJavaProject().findType(packageName1+"."+testBeanGenericName); 
         assertNotNull(_testBeanGenericType);
-        
+
+        // load TestEnum1
+        codeRes = new TestFileResource();
+        codeRes.load(TestsPlugin.getDefault().getBundle(), "/testfiles/TestEnum1.java.data");
+        code = codeRes.toString();
+        _jdtTestEnvironment.addSourceFile(srcFolderName, packageName1, testEnumName1, code);
+
+        _testEnum1Type = _jdtTestEnvironment.getJavaProject().findType(packageName1+"."+testEnumName1); 
+        assertNotNull(_testEnum1Type);
+        assertTrue(_testEnum1Type.isEnum());
+
         // introspect after classes loaded to ensure all dependencies
         // are in the project
-        JDTBeanIntrospector  beanIntrospector = 
-            new JDTBeanIntrospector(_testBean1Type);
+//        JDTBeanIntrospector  beanIntrospector = 
+//            new JDTBeanIntrospector(_testBean1Type);
+//        
+//        _properties = beanIntrospector.getProperties();
+//        
+//        beanIntrospector = 
+//            new JDTBeanIntrospector(_testBeanSubclassType);
+//        
+//        _subClassProperties = beanIntrospector.getProperties();
         
-        _properties = beanIntrospector.getProperties();
-        
-        beanIntrospector = 
-            new JDTBeanIntrospector(_testBeanSubclassType);
-        
-        _subClassProperties = beanIntrospector.getProperties();
-        
-        beanIntrospector = 
-            new JDTBeanIntrospector(_testBeanGenericType);
+//        beanIntrospector = 
+//            new JDTBeanIntrospector(_testBeanGenericType);
     }
 
     protected void tearDown() throws Exception {
@@ -130,16 +144,42 @@
         assertEquals(TypeConstants.TYPE_COLLECTION, TypeUtil.resolveTypeSignature(_testBean1Type, "QCollection;", false));
         assertEquals(TypeConstants.TYPE_MAP, TypeUtil.resolveTypeSignature(_testBean1Type, "QMap;", true));
         assertEquals(TypeConstants.TYPE_MAP, TypeUtil.resolveTypeSignature(_testBean1Type, "QMap;", false));
-        
+
         // in this case, the provided signature has type erasure, so the answer will different depending on typeErasure flag
         final String typeSigWithErasure = TypeUtil.resolveTypeSignature(_testBean1Type, "QMap<QString;QString;>;", true);        
         assertEquals(TypeConstants.TYPE_MAP, typeSigWithErasure);
         final String typeSigNoErasure = TypeUtil.resolveTypeSignature(_testBean1Type, "QMap<QString;QString;>;", false);
         assertEquals("Ljava.util.Map<Ljava.lang.String;Ljava.lang.String;>;", typeSigNoErasure);
+
+        // test resolution of type paramaters
+        IType mapType = TypeUtil.resolveType(_jdtTestEnvironment.getJavaProject(), "Ljava.util.Map;");
+        assertNotNull(mapType);
+        assertEquals(TypeConstants.TYPE_JAVAOBJECT, TypeUtil.resolveTypeSignature(mapType, "TV;", false));
+        
+        // unfound signature
+        assertEquals("QSomeNotRealClass;"
+        		, TypeUtil.resolveTypeSignature(_testBean1Type, "QSomeNotRealClass;", false));
+
+        // arrays
+        assertEquals("[I"
+        		, TypeUtil.resolveTypeSignature(_testBean1Type, "[I"));
+        
+        assertEquals("[Ljava.lang.String;"
+        		, TypeUtil.resolveTypeSignature(_testBean1Type, "[QString;"));
+
+        assertEquals("[Ljava.util.Map;"
+        		, TypeUtil.resolveTypeSignature(_testBean1Type, "[QMap;"));
+
+        assertEquals("[Ljava.util.Collection;"
+        		, TypeUtil.resolveTypeSignature(_testBean1Type, "[QCollection;"));
+
+        // array of arrays
+        assertEquals("[[[Ljava.lang.String;"
+        		, TypeUtil.resolveTypeSignature(_testBean1Type, "[[[QString;"));
         
         // cover cases where wildcards and/or capture are used.  All should be equivalent to the case for
         // the same signature without wildcards and capture
-        
+
         // with type erasure
         runWildcardAndCapture(typeSigWithErasure, true);
         // and without type erasure
@@ -168,30 +208,110 @@
         assertEquals(expected, TypeUtil.resolveTypeSignature(_testBean1Type, "QMap<!+QString;!+QString;>;", typeErasure));
         assertEquals(expected, TypeUtil.resolveTypeSignature(_testBean1Type, "QMap<!+QString;QString;>;", typeErasure));
         assertEquals(expected, TypeUtil.resolveTypeSignature(_testBean1Type, "QMap<QString;!+QString;>;", typeErasure));
+        
+        assertEquals("Ljava.lang.String;", TypeUtil.resolveTypeSignature(_testBean1Type, "!+QString;", typeErasure));
+        
+    }
+    
+    public void testCanNeverBeEqual()
+    {
+    	// one of the arguments is the enum base
+    	assertFalse(TypeUtil.canNeverBeEqual(TypeConstants.TYPE_ENUM_BASE, "Lcom.test.SomeEnum;"));
+    	assertFalse(TypeUtil.canNeverBeEqual("Lcom.test.SomeEnum;", TypeConstants.TYPE_ENUM_BASE));
+    	
+    	assertTrue(TypeUtil.canNeverBeEqual("Lcom.test.SomeEnum1;", "Lcom.test.SomeEnum2;"));
+    	assertFalse(TypeUtil.canNeverBeEqual("Lcom.test.SomeEnum1;", "Lcom.test.SomeEnum1;"));
+    }
+    
+    public void testIsEnumsCompareCompatible()
+    {
+    	// one of the arguments is the enum base
+    	assertTrue(TypeUtil.isEnumsCompareCompatible(TypeConstants.TYPE_ENUM_BASE, "Lcom.test.SomeEnum;"));
+    	assertTrue(TypeUtil.isEnumsCompareCompatible("Lcom.test.SomeEnum;", TypeConstants.TYPE_ENUM_BASE));
+    	
+    	assertFalse(TypeUtil.isEnumsCompareCompatible("Lcom.test.SomeEnum1;", "Lcom.test.SomeEnum2;"));
+    	assertTrue(TypeUtil.isEnumsCompareCompatible("Lcom.test.SomeEnum1;", "Lcom.test.SomeEnum1;"));
     }
     
 //    public void testResolveTypeSignatureITypeStringBoolean() {
 //        fail("Not yet implemented");
 //    }
 //
-//    public void testGetSignature() {
-//        fail("Not yet implemented");
-//    }
-//
-//    public void testResolveMethodSignature() {
-//        fail("Not yet implemented");
-//    }
-//
+    public void testGetSignature() 
+    {
+    	assertEquals("Lcom.test.TestBean1;",TypeUtil.getSignature(_testBean1Type));
+    }
+
+    public void testResolveMethodSignature()  throws Exception
+    {
+        assertEquals("()Ljava.lang.String;"
+        		, TypeUtil.resolveMethodSignature(_testBean1Type, "()QString;"));
+        assertEquals("(Ljava.lang.String;)V"
+        		, TypeUtil.resolveMethodSignature(_testBean1Type, "(QString;)V"));
+        assertEquals("(Ljava.lang.String;Z)V"
+        		, TypeUtil.resolveMethodSignature(_testBean1Type, "(QString;Z)V"));
+        
+        IMethod method = _testBean1Type.getMethod("getStringProp1", null);
+        assertEquals("()Ljava.lang.String;"
+        		, TypeUtil.resolveMethodSignature(_testBean1Type, method.getSignature()));
+        		
+        method = _testBean1Type.getMethod("setStringProperty2", new String[] {"I"});
+        assertEquals("(I)V"
+        		, TypeUtil.resolveMethodSignature(_testBean1Type, method.getSignature()));
+    }
+
 //    public void testGetFullyQualifiedName() {
 //        fail("Not yet implemented");
 //    }
 //
-//    public void testResolveTypeIJavaProjectString() {
-//        fail("Not yet implemented");
-//    }
-//
-//    public void testMatchTypeParameterToArgument() {
-//        fail("Not yet implemented");
-//    }
+    public void testResolveTypeIJavaProjectString() 
+    {
+        assertNotNull(TypeUtil.resolveType(_jdtTestEnvironment.getJavaProject()
+        					, "Ljava.lang.String;"));
+        assertEquals(_testBean1Type
+        			,TypeUtil.resolveType(_jdtTestEnvironment.getJavaProject()
+        									, "Lcom.test.TestBean1;"));
+    }
 
+    public void testMatchTypeParameterToArgument() throws Exception
+    {
+        IType mapType = TypeUtil.resolveType(_jdtTestEnvironment.getJavaProject(), "Ljava.util.Map;");
+        assertNotNull(mapType);
+        
+        List<String> args = new ArrayList<String>();
+        args.add("Ljava.lang.String;");
+        args.add("Lcom.test.TestBean1;");
+        
+        // TestBean1 is the "V" in Map<K,V>
+        assertEquals("Lcom.test.TestBean1;"
+        		     , TypeUtil.matchTypeParameterToArgument(mapType, "TV;", args));
+        
+        // there is no "Q" type arg
+        assertNull(TypeUtil.matchTypeParameterToArgument(mapType, "TQ;", args));
+        // there is no "garbonzo" type arg
+        assertNull(TypeUtil.matchTypeParameterToArgument(mapType, "Tgarbonzo;", args));
+    }
+
+    public void testIsEnumMember() throws Exception
+    {
+    	assertTrue(TypeUtil.isEnumMember(_testEnum1Type, "red"));
+    	assertTrue(TypeUtil.isEnumMember(_testEnum1Type, "blue"));
+    	assertTrue(TypeUtil.isEnumMember(_testEnum1Type, "green"));
+    	assertTrue(TypeUtil.isEnumMember(_testEnum1Type, "yellow"));
+    	assertTrue(TypeUtil.isEnumMember(_testEnum1Type, "purple"));
+    	assertTrue(TypeUtil.isEnumMember(_testEnum1Type, "orange"));
+    	
+    	assertFalse(TypeUtil.isEnumMember(_testEnum1Type, "mauve"));
+    	assertFalse(TypeUtil.isEnumMember(_testEnum1Type, "pink"));
+    	
+    	// test the enum base type.. all things may be members of it
+    	IType type = _jdtTestEnvironment.getJavaProject().findType("java.lang.Enum");
+    	assertNotNull(type);
+    	//assertTrue(type.isEnum());
+    	assertTrue(TypeUtil.isEnumMember(type, "red"));
+    	assertTrue(TypeUtil.isEnumMember(type, "pink"));
+    	assertTrue(TypeUtil.isEnumMember(type, "anything"));
+    	assertTrue(TypeUtil.isEnumMember(type, "deadbeef"));
+    	
+    }
 }
diff --git a/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/validation/TestJSPSemanticsValidator.java b/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/validation/TestJSPSemanticsValidator.java
index 67d1616..a5cb0d8 100644
--- a/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/validation/TestJSPSemanticsValidator.java
+++ b/jsf/tests/org.eclipse.jst.jsf.core.tests/src/org/eclipse/jst/jsf/core/tests/validation/TestJSPSemanticsValidator.java
@@ -6,12 +6,12 @@
 import junit.framework.TestCase;
 
 import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.jst.jsf.context.resolver.structureddocument.IDOMContextResolver;
 import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
 import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
 import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory;
 import org.eclipse.jst.jsf.core.IJSFCoreConstants;
+import org.eclipse.jst.jsf.core.internal.tld.CMUtil;
 import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
 import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
 import org.eclipse.jst.jsf.core.tests.TestsPlugin;
@@ -22,7 +22,6 @@
 import org.eclipse.wst.sse.core.StructuredModelManager;
 import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
 import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
-import org.eclipse.wst.validation.internal.operations.WorkbenchReporter;
 import org.eclipse.wst.validation.internal.provisional.core.IMessage;
 import org.eclipse.wst.validation.internal.provisional.core.IReporter;
 import org.eclipse.wst.validation.internal.provisional.core.IValidator;
@@ -60,7 +59,10 @@
         // load a dummy tld for core
         _testEnv.loadResourceInWebRoot(TestsPlugin.getDefault().getBundle()
     			, "/testfiles/jsf-core.tld.data", "META-INF/jsf-core.tld");
-        
+
+        _testEnv.loadResourceInWebRoot(TestsPlugin.getDefault().getBundle()
+    			, "/testfiles/myfaces_html.tld.data", "META-INF/myfaces_html.tld");
+
         _jspFile = (IFile)
         	_testEnv.loadResourceInWebRoot(TestsPlugin.getDefault().getBundle()
         			, "/testfiles/jsps/testContainment.jsp.data", "testContainment.jsp");
@@ -164,6 +166,7 @@
 		assertTrue(node instanceof Element);
 		Element elem = (Element) node;
 		assertEquals(IJSFConstants.TAG_INPUTTEXT, elem.getLocalName());
+		System.out.println(CMUtil.getElementNamespaceURI(elem));
 
 		MyReporter reporter = new MyReporter();
 		validator.validateContainment(elem, ITLDConstants.URI_JSF_HTML
diff --git a/jsf/tests/org.eclipse.jst.jsf.core.tests/testfiles/TestEnum1.java.data b/jsf/tests/org.eclipse.jst.jsf.core.tests/testfiles/TestEnum1.java.data
new file mode 100644
index 0000000..203499c
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.core.tests/testfiles/TestEnum1.java.data
@@ -0,0 +1,6 @@
+package org.eclipse.jst.jsf.core.tests.util;
+
+public enum TestEnum1 
+{
+	red, blue, green, yellow, orange, purple
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.core.tests/testfiles/myfaces_core.tld.data b/jsf/tests/org.eclipse.jst.jsf.core.tests/testfiles/myfaces_core.tld.data
new file mode 100644
index 0000000..9e547d2
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.core.tests/testfiles/myfaces_core.tld.data
@@ -0,0 +1,781 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ * Copyright 2004,2005,2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+-->
+<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
+<taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
+   <tlib-version>1.0</tlib-version>
+   <jsp-version>1.2</jsp-version>
+   <short-name>f</short-name>
+   <uri>http://java.sun.com/jsf/core</uri>
+   <display-name>JSF core tag library.</display-name>
+   <description>
+        This tag library implements the standard JSF core tags.
+    </description>
+   <!--
+======================================================
+ Listener, that does all the startup work (configuration, init).
+======================================================
+-->
+   <listener>
+      <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
+   </listener>
+   <!--
+======================================================
+ actionListener
+======================================================
+-->
+   <tag>
+      <name>actionListener</name>
+      <tag-class>org.apache.myfaces.taglib.core.ActionListenerTag</tag-class>
+      <body-content>empty</body-content>
+      <description>
+            This tag creates an instance of the specified ActionListener, and
+            associates it with the nearest parent UIComponent.
+
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+        </description>
+      <attribute>
+         <name>type</name>
+         <required>true</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The fully qualified class name of the ActionListener class.</description>
+      </attribute>
+   </tag>
+   <!--
+======================================================
+ attribute
+======================================================
+-->
+   <tag>
+      <name>attribute</name>
+      <tag-class>javax.faces.webapp.AttributeTag</tag-class>
+      <body-content>empty</body-content>
+      <description>
+            This tag associates an attribute with the nearest parent
+            UIComponent. 
+            &lt;p&gt;
+            When the value is not an EL expression, this tag has the same effect
+            as calling component.getAttributes.put(name, value). When the attribute
+            name specified matches a standard property of the component, that
+            property is set. However it is also valid to assign attributes
+            to components using any arbitrary name; the component itself won't
+            make any use of these but other objects such as custom renderers,
+            validators or action listeners can later retrieve the attribute
+            from the component by name.
+            &lt;p&gt;
+            When the value is an EL expression, this tag has the same effect
+            as calling component.setValueBinding. A call to method
+            component.getAttributes().get(name) will then cause that
+            expression to be evaluated and the result of the expression is
+            returned, not the original EL expression string.
+            &lt;p&gt;
+            See the javadoc for UIComponent.getAttributes for more details.
+            &lt;p&gt;
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+            
+        </description>
+      <attribute>
+         <name>name</name>
+         <required>true</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The name of the attribute.</description>
+      </attribute>
+      <attribute>
+         <name>value</name>
+         <required>true</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The attribute's value.</description>
+      </attribute>
+   </tag>
+   <!--
+======================================================
+ converter
+======================================================
+-->
+   <tag>
+      <name>convertDateTime</name>
+      <tag-class>org.apache.myfaces.taglib.core.ConvertDateTimeTag</tag-class>
+      <body-content>empty</body-content>
+      <description>
+            This tag associates a date time converter with the nearest parent UIComponent.
+        
+            Unless otherwise specified, all attributes accept static values or EL expressions.
+        </description>
+      <attribute>
+         <name>dateStyle</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The style of the date.  Values include: default, short, medium, long, and full.</description>
+      </attribute>
+      <attribute>
+         <name>locale</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The name of the locale to be used, instead of the default.</description>
+      </attribute>
+      <attribute>
+         <name>pattern</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>A custom Date formatting pattern, in the format used by java.text.SimpleDateFormat.</description>
+      </attribute>
+      <attribute>
+         <name>timeStyle</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The style of the time.  Values include:  default, short, medium, long, and full.</description>
+      </attribute>
+      <attribute>
+         <name>timeZone</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+                The time zone to use instead of GMT (the default timezone). When
+                this value is a value-binding to a TimeZone instance, that
+                timezone is used. Otherwise this value is treated as a String
+                containing a timezone id, ie as the ID parameter of method
+                java.util.TimeZone.getTimeZone(String).
+            </description>
+      </attribute>
+      <attribute>
+         <name>type</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+                Specifies whether the date, time, or both should be 
+                parsed/formatted.  Values include:  date, time, and both.
+                Default based on setting of timeStyle and dateStyle.
+            </description>
+      </attribute>
+   </tag>
+   <tag>
+      <name>converter</name>
+      <tag-class>javax.faces.webapp.ConverterTag</tag-class>
+      <body-content>empty</body-content>
+      <description>
+            This tag creates an instance of the specified Converter, and
+            associates it with the nearest parent UIComponent.
+        </description>
+      <attribute>
+         <name>converterId</name>
+         <required>true</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The converter's registered ID.</description>
+      </attribute>
+   </tag>
+   <tag>
+      <name>convertNumber</name>
+      <tag-class>org.apache.myfaces.taglib.core.ConvertNumberTag</tag-class>
+      <body-content>empty</body-content>
+      <description>
+            This tag creates a number formatting converter and associates it
+            with the nearest parent UIComponent.
+ 
+            Unless otherwise specified, all attributes accept static values or EL expressions.
+        </description>
+      <attribute>
+         <name>currencyCode</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>ISO 4217 currency code</description>
+      </attribute>
+      <attribute>
+         <name>currencySymbol</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+                The currency symbol used to format a currency value.  Defaults
+                to the currency symbol for locale.
+            </description>
+      </attribute>
+      <attribute>
+         <name>groupingUsed</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Specifies whether output will contain grouping separators.  Default: true.</description>
+      </attribute>
+      <attribute>
+         <name>integerOnly</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Specifies whether only the integer part of the input will be parsed.  Default: false.</description>
+      </attribute>
+      <attribute>
+         <name>locale</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+                The name of the locale to be used, instead of the default as
+                specified in the faces configuration file.
+            </description>
+      </attribute>
+      <attribute>
+         <name>maxFractionDigits</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The maximum number of digits in the fractional portion of the number.</description>
+      </attribute>
+      <attribute>
+         <name>maxIntegerDigits</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The maximum number of digits in the integer portion of the number.</description>
+      </attribute>
+      <attribute>
+         <name>minFractionDigits</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The minimum number of digits in the fractional portion of the number.</description>
+      </attribute>
+      <attribute>
+         <name>minIntegerDigits</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The minimum number of digits in the integer portion of the number.</description>
+      </attribute>
+      <attribute>
+         <name>pattern</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>A custom Date formatting pattern, in the format used by java.text.SimpleDateFormat.</description>
+      </attribute>
+      <attribute>
+         <name>type</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+                The type of formatting/parsing to be performed.  Values include:
+                number, currency, and percent.  Default: number.
+            </description>
+      </attribute>
+   </tag>
+   <!--
+======================================================
+ facet
+======================================================
+-->
+   <tag>
+      <name>facet</name>
+      <tag-class>javax.faces.webapp.FacetTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            This tag adds its child as a facet of the nearest parent UIComponent.
+            A child consisting of multiple elements should be nested within a
+            container component (i.e., within an h:panelGroup for HTML library
+            components).
+
+            Unless otherwise specified, all attributes accept static values or EL expressions.
+        </description>
+      <attribute>
+         <name>name</name>
+         <required>true</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The name of the facet to be created.  This must be a static value.</description>
+      </attribute>
+   </tag>
+   <!--
+======================================================
+ loadBundle
+======================================================
+-->
+   <tag>
+      <name>loadBundle</name>
+      <tag-class>org.apache.myfaces.taglib.core.LoadBundleTag</tag-class>
+      <body-content>empty</body-content>
+      <description>
+            Loads a resource bundle and saves it as a variable in the request scope.
+
+            Unless otherwise specified, all attributes accept static values or EL expressions.
+        </description>
+      <attribute>
+         <name>basename</name>
+         <required>true</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The base name of the resource bundle.</description>
+      </attribute>
+      <attribute>
+         <name>var</name>
+         <required>true</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+                The name of the variable in request scope that the resources
+                are saved to.  This must be a static value.
+            </description>
+      </attribute>
+   </tag>
+   <!--
+======================================================
+ param
+======================================================
+-->
+   <tag>
+      <name>param</name>
+      <tag-class>org.apache.myfaces.taglib.core.ParamTag</tag-class>
+      <body-content>empty</body-content>
+      <description>
+            This tag associates a parameter name-value pair with the nearest
+            parent UIComponent. A UIComponent is created to represent this
+            name-value pair, and stored as a child of the parent component; what
+            effect this has depends upon the renderer of that parent component.
+            &lt;p&gt;
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+            
+        </description>
+      <!-- UIParameter attributes -->
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>name</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>A String containing the name of the parameter.</description>
+      </attribute>
+      <attribute>
+         <name>value</name>
+         <required>true</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>The value of this parameter.</description>
+      </attribute>
+   </tag>
+   <!--
+======================================================
+ selectitem
+======================================================
+-->
+   <tag>
+      <name>selectItem</name>
+      <tag-class>org.apache.myfaces.taglib.core.SelectItemTag</tag-class>
+      <body-content>empty</body-content>
+      <description>
+            This tag associates a single SelectItem with the nearest
+            parent UIComponent. The item represents a single option
+            for a component such as an h:selectBooleanCheckbox or h:selectOneMenu.
+            See also component selectItems.
+            &lt;p&gt;
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+            
+        </description>
+      <!-- UISelectItem attributes -->
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>itemDisabled</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        If true, this component will not be saved during state saving.
+    </description>
+      </attribute>
+      <attribute>
+         <name>itemDescription</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>An optional description for this item.</description>
+      </attribute>
+      <attribute>
+         <name>itemLabel</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The locale-specific label that will be displayed to the user for this item.
+    </description>
+      </attribute>
+      <attribute>
+         <name>itemValue</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The value of this item, of the same type as the parent component's value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>value</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        An EL expression that refers to a javax.faces.model.SelectItem instance.
+    </description>
+      </attribute>
+   </tag>
+   <!--
+======================================================
+ selectitems
+======================================================
+-->
+   <tag>
+      <name>selectItems</name>
+      <tag-class>org.apache.myfaces.taglib.core.SelectItemsTag</tag-class>
+      <body-content>empty</body-content>
+      <description>
+            This tag associates a set of selection list items with the nearest
+            parent UIComponent. The set of SelectItem objects is retrieved via
+            a value-binding.
+            &lt;p&gt;
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+            
+        </description>
+      <!-- UISelectItems attributes -->
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>value</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        An EL expression that specifies the contents of the selection list.
+        The expression can refer to one of the following:
+        &lt;ol&gt;
+            &lt;li&gt;A single SelectItem&lt;/li&gt;
+            &lt;li&gt;An array or Collection of SelectItem instances&lt;/li&gt;
+            &lt;li&gt;A Map. The contents of the Map are used to create SelectItem
+                instances, where the SelectItem's label is the map's key value, 
+                and the SelectItem's value is the map's value. When using a
+                map, it is recommended that an ordered implementation such as
+                java.util.TreeMap is used.&lt;/li&gt;
+        &lt;/ol&gt;
+        The value properties of each of the SelectItems must be of the same
+        basic type as the parent component's value.
+        
+    </description>
+      </attribute>
+   </tag>
+   <!--
+======================================================
+ subview
+======================================================
+-->
+   <tag>
+      <name>subview</name>
+      <tag-class>org.apache.myfaces.taglib.core.SubviewTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            This tag associates a set of UIComponents with the nearest parent
+            UIComponent.  It acts as a naming container to make the IDs of its
+            component elements unique.
+        
+            Unless otherwise specified, all attributes accept static values or EL expressions.
+        </description>
+      <attribute>
+         <name>id</name>
+         <required>true</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rendered</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether this component should be rendered.
+        Default value: true.
+    </description>
+      </attribute>
+   </tag>
+   <!--
+======================================================
+ validators
+======================================================
+-->
+   <tag>
+      <name>validateDoubleRange</name>
+      <tag-class>org.apache.myfaces.taglib.core.ValidateDoubleRangeTag</tag-class>
+      <body-content>empty</body-content>
+      <description>
+            Creates a validator and associateds it with the nearest parent
+            UIComponent.  When invoked, the validator ensures that values are
+            valid doubles that lie within the minimum and maximum values specified.
+        
+            Commonly associated with a h:inputText entity.
+        
+            Unless otherwise specified, all attributes accept static values or EL expressions.
+        </description>
+      <!-- validator min/max attributes -->
+      <attribute>
+         <name>minimum</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>The smallest value that should be considered valid.</description>
+      </attribute>
+      <attribute>
+         <name>maximum</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>The largest value that should be considered valid.</description>
+      </attribute>
+   </tag>
+   <tag>
+      <name>validateLength</name>
+      <tag-class>org.apache.myfaces.taglib.core.ValidateLengthTag</tag-class>
+      <body-content>empty</body-content>
+      <description>
+          Creates a validator and associateds it with the nearest parent
+          UIComponent.  When invoked, the validator ensures that values are
+          valid strings with a length that lies within the minimum and maximum
+          values specified.
+        
+          Commonly associated with a h:inputText entity.
+        
+          Unless otherwise specified, all attributes accept static values or EL expressions.
+      </description>
+      <!-- validator min/max attributes -->
+      <attribute>
+         <name>minimum</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>The smallest value that should be considered valid.</description>
+      </attribute>
+      <attribute>
+         <name>maximum</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>The largest value that should be considered valid.</description>
+      </attribute>
+   </tag>
+   <tag>
+      <name>validateLongRange</name>
+      <tag-class>org.apache.myfaces.taglib.core.ValidateLongRangeTag</tag-class>
+      <body-content>empty</body-content>
+      <description>
+        Creates a validator and associateds it with the nearest parent
+        UIComponent.  When invoked, the validator ensures that values
+        are valid longs that lie within the minimum and maximum values specified.
+        
+        Commonly associated with a h:inputText entity.
+        
+        Unless otherwise specified, all attributes accept static values or EL expressions.
+      </description>
+      <!-- validator min/max attributes -->
+      <attribute>
+         <name>minimum</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>The smallest value that should be considered valid.</description>
+      </attribute>
+      <attribute>
+         <name>maximum</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>The largest value that should be considered valid.</description>
+      </attribute>
+   </tag>
+   <tag>
+      <name>validator</name>
+      <tag-class>javax.faces.webapp.ValidatorTag</tag-class>
+      <body-content>empty</body-content>
+      <description>
+        Creates a validator and associates it with the nearest parent
+        UIComponent.  During the validation phase (or the apply-request-values
+        phase for immediate components), if the associated component has any
+        submitted value and the conversion of that value to the required
+        type has succeeded then the specified validator type is
+        invoked to test the validity of the converted value.
+        &lt;p&gt;
+        Commonly associated with an h:inputText entity, but may be applied to
+        any input component.
+        &lt;p&gt;
+        Some validators may allow the component to use attributes to define
+        component-specific validation constraints; see the f:attribute tag.
+        See also the "validator" attribute of all input components, which
+        allows a component to specify an arbitrary validation &lt;i&gt;method&lt;/i&gt;
+        (rather than a registered validation type, as this tag does).
+        &lt;p&gt;
+        Unless otherwise specified, all attributes accept static values
+        or EL expressions.
+        
+      </description>
+      <attribute>
+         <name>validatorId</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>The registered ID of the desired Validator.</description>
+      </attribute>
+   </tag>
+   <!--
+======================================================
+ valueChangeListener
+======================================================
+-->
+   <tag>
+      <name>valueChangeListener</name>
+      <tag-class>org.apache.myfaces.taglib.core.ValueChangeListenerTag</tag-class>
+      <body-content>empty</body-content>
+      <description>
+            Adds the specified ValueChangeListener to the nearest parent
+            UIComponent (which is expected to be a UIInput component).
+            Whenever the form containing the parent UIComponent is submitted,
+            an instance of the specified type is created. If the submitted
+            value from the component is different from the component's current
+            value then a ValueChangeEvent is queued. When the ValueChangeEvent
+            is processed (at end of the validate phase for non-immediate components,
+            or at end of the apply-request-values phase for immediate components)
+            the object's processValueChange method is invoked.
+            &lt;p&gt;
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+            
+        </description>
+      <attribute>
+         <name>type</name>
+         <required>true</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The name of a Java class that implements ValueChangeListener.</description>
+      </attribute>
+   </tag>
+   <!--
+======================================================
+ verbatim
+======================================================
+-->
+   <tag>
+      <name>verbatim</name>
+      <tag-class>org.apache.myfaces.taglib.core.VerbatimTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            Outputs its body as verbatim text. No JSP tags within the verbatim
+            tag (including JSF tags) are evaluated; the content is treated
+            simply as literal text to be copied to the response.
+            &lt;p&gt;
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+            
+        </description>
+      <attribute>
+         <name>escape</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>If true, generated markup is escaped.  Default:  false.</description>
+      </attribute>
+   </tag>
+   <!--
+======================================================
+ view
+======================================================
+-->
+   <tag>
+      <name>view</name>
+      <tag-class>org.apache.myfaces.taglib.core.ViewTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            Creates a JSF View, which is a container that holds all of the
+            components that are part of the view.
+
+            Unless otherwise specified, all attributes accept static values or EL expressions.
+        </description>
+      <attribute>
+         <name>locale</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The locale of this view.  Default:  the default locale from the configuration file.</description>
+      </attribute>
+   </tag>
+</taglib>
diff --git a/jsf/tests/org.eclipse.jst.jsf.core.tests/testfiles/myfaces_html.tld.data b/jsf/tests/org.eclipse.jst.jsf.core.tests/testfiles/myfaces_html.tld.data
new file mode 100644
index 0000000..386e895
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.core.tests/testfiles/myfaces_html.tld.data
@@ -0,0 +1,6200 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+-->
+<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
+<taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
+   <tlib-version>1.0</tlib-version>
+   <jsp-version>1.2</jsp-version>
+   <short-name>h</short-name>
+   <uri>http://java.sun.com/jsf/html</uri>
+   <display-name>JSF HTML tag library.</display-name>
+   <description>
+        This tag library implements the standard JSF HTML tags.
+    </description>
+   <!--
+*************************************************************************************
+Start of revised 1.0 conforming tags (in alphabetical order)
+*************************************************************************************
+-->
+   <!-- column -->
+   <tag>
+      <name>column</name>
+      <tag-class>org.apache.myfaces.taglib.html.HtmlColumnTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            This tag is commonly used as a child of the dataTable tag, to
+            represent a column of data. It can be decorated with "header" and
+            "footer" facets to drive the output of header and footer rows.
+            Row values are specified via its children.
+
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+        </description>
+      <!-- UIComponent attributes -->
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rendered</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether this component should be rendered.
+        Default value: true.
+    </description>
+      </attribute>
+   </tag>
+   <!-- commandButton -->
+   <tag>
+      <name>commandButton</name>
+      <tag-class>org.apache.myfaces.taglib.html.HtmlCommandButtonTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            This tag renders as an HTML input element.
+
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+        </description>
+      <!-- all standard attributes of the commandButton tag -->
+      <!-- UICommand attributes -->
+      <!-- UIComponent attributes -->
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rendered</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether this component should be rendered.
+        Default value: true.
+    </description>
+      </attribute>
+      <attribute>
+         <name>action</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+    	Specifies the action to take when this command is invoked.
+    	
+        If the value is an expression, it is expected to be a method 
+        binding EL expression that identifies an action method. An action method
+        accepts no parameters and has a String return value, called the action
+        outcome, that identifies the next view displayed. The phase that this
+        event is fired in can be controlled via the immediate attribute.
+
+    	If the value is a string literal, it is treated as a navigation outcome
+    	for the current view.  This is functionally equivalent to a reference to
+    	an action method that returns the string literal.
+    </description>
+      </attribute>
+      <attribute>
+         <name>actionListener</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A method binding EL expression that identifies an action listener method
+        to be invoked if this component is activated by the user. An action
+        listener method accepts a parameter of type javax.faces.event.ActionEvent
+        and returns void. The phase that this event is fired in can be controlled
+        via the immediate attribute.
+    </description>
+      </attribute>
+      <attribute>
+         <name>immediate</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that identifies the phase during which action events
+        should fire. During normal event processing, action methods and
+        action listener methods are fired during the "invoke application"
+        phase of request processing. If this attribute is set to "true",
+        these methods are fired instead at the end of the "apply request
+        values" phase.
+    </description>
+      </attribute>
+      <attribute>
+         <name>value</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>The initial value of this component.</description>
+      </attribute>
+      <!-- HTML 4.0 universal attributes -->
+      <attribute>
+         <name>dir</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The direction of text display, either 'ltr' (left-to-right) or 'rtl' (right-to-left).</description>
+      </attribute>
+      <attribute>
+         <name>lang</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The base language of this document.</description>
+      </attribute>
+      <attribute>
+         <name>style</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: CSS styling instructions.</description>
+      </attribute>
+      <attribute>
+         <name>title</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: An advisory title for this element.  Often used by the user agent as a tooltip.</description>
+      </attribute>
+      <attribute>
+         <name>styleClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class for this element.  Corresponds to the HTML 'class' attribute.</description>
+      </attribute>
+      <!-- HTML 4.0 event-handler attributes -->
+      <attribute>
+         <name>onclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is clicked.</description>
+      </attribute>
+      <attribute>
+         <name>ondblclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is double-clicked.</description>
+      </attribute>
+      <attribute>
+         <name>onmousedown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is released over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseover</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved into this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmousemove</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved while it is in this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseout</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moves out of this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeypress</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeydown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed down over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeyup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is released over this element.</description>
+      </attribute>
+      <!-- HTML 4.0 button attributes -->
+      <attribute>
+         <name>accesskey</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Sets the access key for this element.</description>
+      </attribute>
+      <attribute>
+         <name>alt</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies alternative text that can be used by a browser that can't show this element.</description>
+      </attribute>
+      <attribute>
+         <name>disabled</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: When true, this element cannot receive focus.</description>
+      </attribute>
+      <attribute>
+         <name>onblur</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element loses focus.</description>
+      </attribute>
+      <attribute>
+         <name>onfocus</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element receives focus.</description>
+      </attribute>
+      <attribute>
+         <name>onselect</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element is selected.</description>
+      </attribute>
+      <attribute>
+         <name>onchange</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element is modified.</description>
+      </attribute>
+      <attribute>
+         <name>tabindex</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies the position of this element within the tab order of the document.</description>
+      </attribute>
+      <attribute>
+         <name>type</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: A hint to the user agent about the content type of the linked resource.</description>
+      </attribute>
+      <attribute>
+         <name>size</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>The initial width of this control.</description>
+      </attribute>
+      <!-- HtmlCommandButton attributes -->
+      <attribute>
+         <name>image</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The URL of an image that renders in place of the button.</description>
+      </attribute>
+   </tag>
+   <!-- commandLink -->
+   <tag>
+      <name>commandLink</name>
+      <tag-class>org.apache.myfaces.taglib.html.HtmlCommandLinkTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            This tag renders as an HTML a element.
+
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+        </description>
+      <!-- all standard attributes of the commandLink tag -->
+      <!-- UICommand attributes -->
+      <!-- UIComponent attributes -->
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rendered</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether this component should be rendered.
+        Default value: true.
+    </description>
+      </attribute>
+      <attribute>
+         <name>action</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+    	Specifies the action to take when this command is invoked.
+    	
+        If the value is an expression, it is expected to be a method 
+        binding EL expression that identifies an action method. An action method
+        accepts no parameters and has a String return value, called the action
+        outcome, that identifies the next view displayed. The phase that this
+        event is fired in can be controlled via the immediate attribute.
+
+    	If the value is a string literal, it is treated as a navigation outcome
+    	for the current view.  This is functionally equivalent to a reference to
+    	an action method that returns the string literal.
+    </description>
+      </attribute>
+      <attribute>
+         <name>actionListener</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A method binding EL expression that identifies an action listener method
+        to be invoked if this component is activated by the user. An action
+        listener method accepts a parameter of type javax.faces.event.ActionEvent
+        and returns void. The phase that this event is fired in can be controlled
+        via the immediate attribute.
+    </description>
+      </attribute>
+      <attribute>
+         <name>immediate</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that identifies the phase during which action events
+        should fire. During normal event processing, action methods and
+        action listener methods are fired during the "invoke application"
+        phase of request processing. If this attribute is set to "true",
+        these methods are fired instead at the end of the "apply request
+        values" phase.
+    </description>
+      </attribute>
+      <attribute>
+         <name>value</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>The initial value of this component.</description>
+      </attribute>
+      <!-- HTML 4.0 universal attributes -->
+      <attribute>
+         <name>dir</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The direction of text display, either 'ltr' (left-to-right) or 'rtl' (right-to-left).</description>
+      </attribute>
+      <attribute>
+         <name>lang</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The base language of this document.</description>
+      </attribute>
+      <attribute>
+         <name>style</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: CSS styling instructions.</description>
+      </attribute>
+      <attribute>
+         <name>title</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: An advisory title for this element.  Often used by the user agent as a tooltip.</description>
+      </attribute>
+      <attribute>
+         <name>styleClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class for this element.  Corresponds to the HTML 'class' attribute.</description>
+      </attribute>
+      <!-- HTML 4.0 event-handler attributes -->
+      <attribute>
+         <name>onclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is clicked.</description>
+      </attribute>
+      <attribute>
+         <name>ondblclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is double-clicked.</description>
+      </attribute>
+      <attribute>
+         <name>onmousedown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is released over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseover</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved into this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmousemove</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved while it is in this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseout</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moves out of this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeypress</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeydown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed down over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeyup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is released over this element.</description>
+      </attribute>
+      <!-- HTML 4.0 anchor (=a) attributes -->
+      <attribute>
+         <name>accesskey</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Sets the access key for this element.</description>
+      </attribute>
+      <attribute>
+         <name>charset</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies the character encoding of the linked resource.</description>
+      </attribute>
+      <attribute>
+         <name>tabindex</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies the position of this element within the tab order of the document.</description>
+      </attribute>
+      <attribute>
+         <name>onblur</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element loses focus.</description>
+      </attribute>
+      <attribute>
+         <name>onfocus</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element receives focus.</description>
+      </attribute>
+      <attribute>
+         <name>type</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: A hint to the user agent about the content type of the linked resource.</description>
+      </attribute>
+      <attribute>
+         <name>target</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Names the frame that should display content generated by invoking this action. </description>
+      </attribute>
+      <attribute>
+         <name>coords</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: The coordinates of regions within a client side image map.</description>
+      </attribute>
+      <!-- "href" is a special LinkRenderer attribute -->
+      <attribute>
+         <name>hreflang</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: The language of the linked resource.</description>
+      </attribute>
+      <!-- "name" cannot be set by user -->
+      <attribute>
+         <name>rel</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+                HTML: The relationship between the current document and
+                the linked resource.
+            </description>
+      </attribute>
+      <attribute>
+         <name>rev</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+                HTML: The type(s) describing the reverse link for the linked
+                resource.
+            </description>
+      </attribute>
+      <attribute>
+         <name>shape</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+                HTML: The shape of a region in a client side image map.
+            </description>
+      </attribute>
+   </tag>
+   <!-- data_table -->
+   <tag>
+      <name>dataTable</name>
+      <tag-class>org.apache.myfaces.taglib.html.HtmlDataTableTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            This component renders as an HTML table element.  It has as its
+            children h:column entities, which describe the columns of the table.
+            It can be decorated with facets named "header" and "footer" to
+            specify header and footer rows.
+
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+        </description>
+      <!-- all standard attributes of the dataTable tag -->
+      <!-- UIPanel attributes -->
+      <!-- UIComponent attributes -->
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rendered</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether this component should be rendered.
+        Default value: true.
+    </description>
+      </attribute>
+      <attribute>
+         <name>columnClasses</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+        A comma separated list of CSS class names to apply to td elements in
+        each column.
+    </description>
+      </attribute>
+      <attribute>
+         <name>footerClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class to be applied to footer cells.</description>
+      </attribute>
+      <attribute>
+         <name>headerClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class to be applied to header cells.</description>
+      </attribute>
+      <attribute>
+         <name>rowClasses</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+        A comma separated list of CSS class names to apply to td elements in
+        each row.
+    </description>
+      </attribute>
+      <!-- HTML 4.0 universal attributes -->
+      <attribute>
+         <name>dir</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The direction of text display, either 'ltr' (left-to-right) or 'rtl' (right-to-left).</description>
+      </attribute>
+      <attribute>
+         <name>lang</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The base language of this document.</description>
+      </attribute>
+      <attribute>
+         <name>style</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: CSS styling instructions.</description>
+      </attribute>
+      <attribute>
+         <name>title</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: An advisory title for this element.  Often used by the user agent as a tooltip.</description>
+      </attribute>
+      <attribute>
+         <name>styleClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class for this element.  Corresponds to the HTML 'class' attribute.</description>
+      </attribute>
+      <!-- HTML 4.0 event-handler attributes -->
+      <attribute>
+         <name>onclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is clicked.</description>
+      </attribute>
+      <attribute>
+         <name>ondblclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is double-clicked.</description>
+      </attribute>
+      <attribute>
+         <name>onmousedown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is released over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseover</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved into this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmousemove</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved while it is in this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseout</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moves out of this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeypress</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeydown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed down over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeyup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is released over this element.</description>
+      </attribute>
+      <!-- HTML 4.0 table attributes -->
+      <attribute>
+         <name>align</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Specifies the horizontal alignment of this element.  Deprecated in HTML 4.01.</description>
+      </attribute>
+      <attribute>
+         <name>border</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies the width of the border of this element, in pixels.  Deprecated in HTML 4.01.</description>
+      </attribute>
+      <attribute>
+         <name>bgcolor</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The background color of this element.</description>
+      </attribute>
+      <attribute>
+         <name>datafld</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <attribute>
+         <name>datasrc</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <attribute>
+         <name>dataformatas</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <attribute>
+         <name>cellpadding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+        HTML: Specifies the amount of empty space between the cell border and
+        its contents.  It can be either a pixel length or a percentage.
+    </description>
+      </attribute>
+      <attribute>
+         <name>cellspacing</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+        HTML: Specifies the amount of space between the cells of the table.
+        It can be either a pixel length or a percentage of available 
+        space.
+    </description>
+      </attribute>
+      <attribute>
+         <name>frame</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+        HTML: Controls what part of the frame that surrounds a table is 
+        visible.  Values include:  void, above, below, hsides, lhs, 
+        rhs, vsides, box, and border.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rules</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+        HTML: Controls how rules are rendered between cells.  Values include:
+        none, groups, rows, cols, and all.
+    </description>
+      </attribute>
+      <attribute>
+         <name>summary</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+        HTML: Provides a summary of the contents of the table, for
+        accessibility purposes.
+    </description>
+      </attribute>
+      <attribute>
+         <name>width</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+        HTML: Specifies the desired width of the table, as a pixel length or
+        a percentage of available space.
+    </description>
+      </attribute>
+      <!-- UIData attributes -->
+      <attribute>
+         <name>value</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>An EL expression that specifies the data model that backs this table.  The value can be of any type.
+            
+            A value of type DataModel is used directly.  Array-like parameters of type java.util.List, array of Object, 
+            java.sql.ResultSet, or javax.servlet.jsp.jstl.sql.Result are wrapped in a DataModel.
+            
+            Other values are wrapped in a DataModel as a single row.</description>
+      </attribute>
+      <attribute>
+         <name>var</name>
+         <required>true</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Defines the name of the request-scope variable that will hold the current row during iteration.  This value must be a static value.</description>
+      </attribute>
+      <attribute>
+         <name>rows</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The number of rows to be displayed.  Specify zero for all remaining rows in the table.</description>
+      </attribute>
+      <attribute>
+         <name>first</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The index of the first row to be displayed, where 0 is the first row.</description>
+      </attribute>
+   </tag>
+   <!-- form -->
+   <tag>
+      <name>form</name>
+      <tag-class>org.apache.myfaces.taglib.html.HtmlFormTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            Renders an HTML form element.
+
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+        </description>
+      <!-- UIForm attributes -->
+      <!-- UIComponent attributes -->
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rendered</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether this component should be rendered.
+        Default value: true.
+    </description>
+      </attribute>
+      <!-- HTML 4.0 universal attributes -->
+      <attribute>
+         <name>dir</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The direction of text display, either 'ltr' (left-to-right) or 'rtl' (right-to-left).</description>
+      </attribute>
+      <attribute>
+         <name>lang</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The base language of this document.</description>
+      </attribute>
+      <attribute>
+         <name>style</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: CSS styling instructions.</description>
+      </attribute>
+      <attribute>
+         <name>title</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: An advisory title for this element.  Often used by the user agent as a tooltip.</description>
+      </attribute>
+      <attribute>
+         <name>styleClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class for this element.  Corresponds to the HTML 'class' attribute.</description>
+      </attribute>
+      <!-- HTML 4.0 event-handler attributes -->
+      <attribute>
+         <name>onclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is clicked.</description>
+      </attribute>
+      <attribute>
+         <name>ondblclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is double-clicked.</description>
+      </attribute>
+      <attribute>
+         <name>onmousedown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is released over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseover</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved into this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmousemove</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved while it is in this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseout</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moves out of this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeypress</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeydown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed down over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeyup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is released over this element.</description>
+      </attribute>
+      <!-- HTML 4.0 form attributes -->
+      <attribute>
+         <name>target</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Names the frame that should display content generated by invoking this action. </description>
+      </attribute>
+      <attribute>
+         <name>accept</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+        HTML: Provides a comma-separated list of content types that the 
+        server processing this form can handle.
+    </description>
+      </attribute>
+      <attribute>
+         <name>acceptCharset</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+        HTML: The list of character encodings accepted by the server for this
+        form.
+    </description>
+      </attribute>
+      <attribute>
+         <name>enctype</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+        HTML: The content type used to submit this form to the server.
+    </description>
+      </attribute>
+      <attribute>
+         <name>onreset</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when this form is reset.</description>
+      </attribute>
+      <attribute>
+         <name>onsubmit</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when this form is submitted.</description>
+      </attribute>
+   </tag>
+   <!-- graphic_image -->
+   <tag>
+      <name>graphicImage</name>
+      <tag-class>org.apache.myfaces.taglib.html.HtmlGraphicImageTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            Renders an HTML img element.
+
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+        </description>
+      <!-- UIGraphic attributes -->
+      <!-- UIComponent attributes -->
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rendered</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether this component should be rendered.
+        Default value: true.
+    </description>
+      </attribute>
+      <attribute>
+         <name>url</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        An alias for the "value" attribute.
+    </description>
+      </attribute>
+      <attribute>
+         <name>value</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The URL of the image.  If the URL starts with a '/', it is relative
+        to the context path of the web application.
+    </description>
+      </attribute>
+      <!-- HTML 4.0 universal attributes -->
+      <attribute>
+         <name>dir</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The direction of text display, either 'ltr' (left-to-right) or 'rtl' (right-to-left).</description>
+      </attribute>
+      <attribute>
+         <name>lang</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The base language of this document.</description>
+      </attribute>
+      <attribute>
+         <name>style</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: CSS styling instructions.</description>
+      </attribute>
+      <attribute>
+         <name>title</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: An advisory title for this element.  Often used by the user agent as a tooltip.</description>
+      </attribute>
+      <attribute>
+         <name>styleClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class for this element.  Corresponds to the HTML 'class' attribute.</description>
+      </attribute>
+      <!-- HTML 4.0 event-handler attributes -->
+      <attribute>
+         <name>onclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is clicked.</description>
+      </attribute>
+      <attribute>
+         <name>ondblclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is double-clicked.</description>
+      </attribute>
+      <attribute>
+         <name>onmousedown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is released over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseover</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved into this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmousemove</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved while it is in this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseout</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moves out of this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeypress</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeydown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed down over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeyup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is released over this element.</description>
+      </attribute>
+      <!-- The subset of HTML 4.0 img attributes that are supported by the JSF 1.1 specification -->
+      <attribute>
+         <name>alt</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies alternative text that can be used by a browser that can't show this element.</description>
+      </attribute>
+      <attribute>
+         <name>height</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Overrides the natural height of this image, by specifying height in pixels.</description>
+      </attribute>
+      <attribute>
+         <name>ismap</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies server-side image map handling for this image.</description>
+      </attribute>
+      <attribute>
+         <name>longdesc</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: A link to a long description of the image.</description>
+      </attribute>
+      <!-- "name" attribute cannot be set directly by user -->
+      <!-- "src" attribute cannot be set directly, use "url" instead! -->
+      <attribute>
+         <name>usemap</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies an image map to use with this image.</description>
+      </attribute>
+      <attribute>
+         <name>width</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Overrides the natural width of this image, by specifying width in pixels.</description>
+      </attribute>
+   </tag>
+   <!-- input_hidden -->
+   <tag>
+      <name>inputHidden</name>
+      <tag-class>org.apache.myfaces.taglib.html.HtmlInputHiddenTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            Renders as an HTML input tag with its type set to "hidden".
+
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+        </description>
+      <!-- UIInput attributes -->
+      <!-- UIOutput attributes -->
+      <!-- UIComponent attributes -->
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rendered</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether this component should be rendered.
+        Default value: true.
+    </description>
+      </attribute>
+      <attribute>
+         <name>value</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>The initial value of this component.</description>
+      </attribute>
+      <attribute>
+         <name>converter</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        An expression that specifies the Converter for this component.  
+        If the value binding expression is a String, the String is used
+        as an ID to look up a Converter. If the value binding expression
+        is a Converter, uses that instance as the converter.
+            
+        The value can either be a static value (ID case only) or an EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>immediate</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that identifies the phase during which value change
+        events should fire. During normal event processing, value change
+        events are fired during the "invoke application" phase of request
+        processing. If this attribute is set to "true", these methods are
+        fired instead at the end of the "apply request values" phase.
+    </description>
+      </attribute>
+      <attribute>
+         <name>required</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether an input value is required.
+        If this value is true, and no input value is provided, the error
+        message javax.faces.component.UIInput.REQUIRED is posted.
+    </description>
+      </attribute>
+      <attribute>
+         <name>validator</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A method binding EL expression, accepting FacesContext, UIComponent,
+        and Object parameters, and returning void, that validates the
+        component's local value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>valueChangeListener</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A method binding EL expression, accepting a ValueChangeEvent parameter
+        and returning void. The specified method is invoked if this component
+        is modified. The phase that this handler is fired in can be controlled
+        via the immediate attribute.
+    </description>
+      </attribute>
+   </tag>
+   <!-- input_secret -->
+   <tag>
+      <name>inputSecret</name>
+      <tag-class>org.apache.myfaces.taglib.html.HtmlInputSecretTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            Renders as an HTML input tag with its type set to "password".
+
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+        </description>
+      <!-- todo: not all html_input_attributes are used for input_secret
+            in RI (e.g. datafld, datasrc, ...) -->
+      <!-- UIInput attributes -->
+      <!-- UIOutput attributes -->
+      <!-- UIComponent attributes -->
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rendered</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether this component should be rendered.
+        Default value: true.
+    </description>
+      </attribute>
+      <attribute>
+         <name>value</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>The initial value of this component.</description>
+      </attribute>
+      <attribute>
+         <name>converter</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        An expression that specifies the Converter for this component.  
+        If the value binding expression is a String, the String is used
+        as an ID to look up a Converter. If the value binding expression
+        is a Converter, uses that instance as the converter.
+            
+        The value can either be a static value (ID case only) or an EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>immediate</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that identifies the phase during which value change
+        events should fire. During normal event processing, value change
+        events are fired during the "invoke application" phase of request
+        processing. If this attribute is set to "true", these methods are
+        fired instead at the end of the "apply request values" phase.
+    </description>
+      </attribute>
+      <attribute>
+         <name>required</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether an input value is required.
+        If this value is true, and no input value is provided, the error
+        message javax.faces.component.UIInput.REQUIRED is posted.
+    </description>
+      </attribute>
+      <attribute>
+         <name>validator</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A method binding EL expression, accepting FacesContext, UIComponent,
+        and Object parameters, and returning void, that validates the
+        component's local value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>valueChangeListener</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A method binding EL expression, accepting a ValueChangeEvent parameter
+        and returning void. The specified method is invoked if this component
+        is modified. The phase that this handler is fired in can be controlled
+        via the immediate attribute.
+    </description>
+      </attribute>
+      <!-- HTML 4.0 input attributes -->
+      <attribute>
+         <name>accesskey</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Sets the access key for this element.</description>
+      </attribute>
+      <attribute>
+         <name>align</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Specifies the horizontal alignment of this element.  Deprecated in HTML 4.01.</description>
+      </attribute>
+      <attribute>
+         <name>alt</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies alternative text that can be used by a browser that can't show this element.</description>
+      </attribute>
+      <attribute>
+         <name>disabled</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: When true, this element cannot receive focus.</description>
+      </attribute>
+      <attribute>
+         <name>onblur</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element loses focus.</description>
+      </attribute>
+      <attribute>
+         <name>onfocus</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element receives focus.</description>
+      </attribute>
+      <attribute>
+         <name>onchange</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element is modified.</description>
+      </attribute>
+      <attribute>
+         <name>onselect</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element is selected.</description>
+      </attribute>
+      <attribute>
+         <name>readonly</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        HTML: When true, indicates that this component cannot be modified by the user.
+        The element may receive focus unless it has also been disabled.
+    </description>
+      </attribute>
+      <attribute>
+         <name>tabindex</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies the position of this element within the tab order of the document.</description>
+      </attribute>
+      <attribute>
+         <name>maxlength</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: The maximum number of characters allowed to be entered.</description>
+      </attribute>
+      <attribute>
+         <name>size</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: The initial width of this control, in characters.</description>
+      </attribute>
+      <!-- HTML 4.0 universal attributes -->
+      <attribute>
+         <name>dir</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The direction of text display, either 'ltr' (left-to-right) or 'rtl' (right-to-left).</description>
+      </attribute>
+      <attribute>
+         <name>lang</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The base language of this document.</description>
+      </attribute>
+      <attribute>
+         <name>style</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: CSS styling instructions.</description>
+      </attribute>
+      <attribute>
+         <name>title</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: An advisory title for this element.  Often used by the user agent as a tooltip.</description>
+      </attribute>
+      <attribute>
+         <name>styleClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class for this element.  Corresponds to the HTML 'class' attribute.</description>
+      </attribute>
+      <!-- HTML 4.0 event-handler attributes -->
+      <attribute>
+         <name>onclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is clicked.</description>
+      </attribute>
+      <attribute>
+         <name>ondblclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is double-clicked.</description>
+      </attribute>
+      <attribute>
+         <name>onmousedown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is released over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseover</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved into this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmousemove</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved while it is in this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseout</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moves out of this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeypress</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeydown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed down over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeyup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is released over this element.</description>
+      </attribute>
+      <!-- SecretRenderer attributes -->
+      <attribute>
+         <name>redisplay</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+                If true, the value will be re-sent (in plaintext) when the form
+                is rerendered (see JSF.7.4.4). Default is false.
+            </description>
+      </attribute>
+   </tag>
+   <!-- input_text -->
+   <tag>
+      <name>inputText</name>
+      <tag-class>org.apache.myfaces.taglib.html.HtmlInputTextTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            Renders a HTML input element.
+
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+        </description>
+      <!-- all standard attributes of the inputText tag -->
+      <!-- UIInput attributes -->
+      <!-- UIOutput attributes -->
+      <!-- UIComponent attributes -->
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rendered</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether this component should be rendered.
+        Default value: true.
+    </description>
+      </attribute>
+      <attribute>
+         <name>value</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>The initial value of this component.</description>
+      </attribute>
+      <attribute>
+         <name>converter</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        An expression that specifies the Converter for this component.  
+        If the value binding expression is a String, the String is used
+        as an ID to look up a Converter. If the value binding expression
+        is a Converter, uses that instance as the converter.
+            
+        The value can either be a static value (ID case only) or an EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>immediate</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that identifies the phase during which value change
+        events should fire. During normal event processing, value change
+        events are fired during the "invoke application" phase of request
+        processing. If this attribute is set to "true", these methods are
+        fired instead at the end of the "apply request values" phase.
+    </description>
+      </attribute>
+      <attribute>
+         <name>required</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether an input value is required.
+        If this value is true, and no input value is provided, the error
+        message javax.faces.component.UIInput.REQUIRED is posted.
+    </description>
+      </attribute>
+      <attribute>
+         <name>validator</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A method binding EL expression, accepting FacesContext, UIComponent,
+        and Object parameters, and returning void, that validates the
+        component's local value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>valueChangeListener</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A method binding EL expression, accepting a ValueChangeEvent parameter
+        and returning void. The specified method is invoked if this component
+        is modified. The phase that this handler is fired in can be controlled
+        via the immediate attribute.
+    </description>
+      </attribute>
+      <!-- HTML 4.0 universal attributes -->
+      <attribute>
+         <name>dir</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The direction of text display, either 'ltr' (left-to-right) or 'rtl' (right-to-left).</description>
+      </attribute>
+      <attribute>
+         <name>lang</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The base language of this document.</description>
+      </attribute>
+      <attribute>
+         <name>style</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: CSS styling instructions.</description>
+      </attribute>
+      <attribute>
+         <name>title</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: An advisory title for this element.  Often used by the user agent as a tooltip.</description>
+      </attribute>
+      <attribute>
+         <name>styleClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class for this element.  Corresponds to the HTML 'class' attribute.</description>
+      </attribute>
+      <!-- HTML 4.0 event-handler attributes -->
+      <attribute>
+         <name>onclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is clicked.</description>
+      </attribute>
+      <attribute>
+         <name>ondblclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is double-clicked.</description>
+      </attribute>
+      <attribute>
+         <name>onmousedown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is released over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseover</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved into this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmousemove</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved while it is in this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseout</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moves out of this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeypress</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeydown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed down over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeyup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is released over this element.</description>
+      </attribute>
+      <!-- HTML 4.0 input attributes -->
+      <attribute>
+         <name>accesskey</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Sets the access key for this element.</description>
+      </attribute>
+      <attribute>
+         <name>align</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Specifies the horizontal alignment of this element.  Deprecated in HTML 4.01.</description>
+      </attribute>
+      <attribute>
+         <name>alt</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies alternative text that can be used by a browser that can't show this element.</description>
+      </attribute>
+      <attribute>
+         <name>disabled</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: When true, this element cannot receive focus.</description>
+      </attribute>
+      <attribute>
+         <name>onblur</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element loses focus.</description>
+      </attribute>
+      <attribute>
+         <name>onfocus</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element receives focus.</description>
+      </attribute>
+      <attribute>
+         <name>onchange</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element is modified.</description>
+      </attribute>
+      <attribute>
+         <name>onselect</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element is selected.</description>
+      </attribute>
+      <attribute>
+         <name>readonly</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        HTML: When true, indicates that this component cannot be modified by the user.
+        The element may receive focus unless it has also been disabled.
+    </description>
+      </attribute>
+      <attribute>
+         <name>tabindex</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies the position of this element within the tab order of the document.</description>
+      </attribute>
+      <attribute>
+         <name>maxlength</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: The maximum number of characters allowed to be entered.</description>
+      </attribute>
+      <attribute>
+         <name>size</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: The initial width of this control, in characters.</description>
+      </attribute>
+   </tag>
+   <!-- input_textarea -->
+   <tag>
+      <name>inputTextarea</name>
+      <tag-class>org.apache.myfaces.taglib.html.HtmlInputTextareaTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            Renders a HTML textarea element.
+
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+        </description>
+      <!-- all standard attributes of the inputTextarea tag -->
+      <!-- UIInput attributes -->
+      <!-- UIOutput attributes -->
+      <!-- UIComponent attributes -->
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rendered</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether this component should be rendered.
+        Default value: true.
+    </description>
+      </attribute>
+      <attribute>
+         <name>value</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>The initial value of this component.</description>
+      </attribute>
+      <attribute>
+         <name>converter</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        An expression that specifies the Converter for this component.  
+        If the value binding expression is a String, the String is used
+        as an ID to look up a Converter. If the value binding expression
+        is a Converter, uses that instance as the converter.
+            
+        The value can either be a static value (ID case only) or an EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>immediate</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that identifies the phase during which value change
+        events should fire. During normal event processing, value change
+        events are fired during the "invoke application" phase of request
+        processing. If this attribute is set to "true", these methods are
+        fired instead at the end of the "apply request values" phase.
+    </description>
+      </attribute>
+      <attribute>
+         <name>required</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether an input value is required.
+        If this value is true, and no input value is provided, the error
+        message javax.faces.component.UIInput.REQUIRED is posted.
+    </description>
+      </attribute>
+      <attribute>
+         <name>validator</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A method binding EL expression, accepting FacesContext, UIComponent,
+        and Object parameters, and returning void, that validates the
+        component's local value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>valueChangeListener</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A method binding EL expression, accepting a ValueChangeEvent parameter
+        and returning void. The specified method is invoked if this component
+        is modified. The phase that this handler is fired in can be controlled
+        via the immediate attribute.
+    </description>
+      </attribute>
+      <!-- HTML 4.0 textarea attributes -->
+      <attribute>
+         <name>datafld</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <attribute>
+         <name>datasrc</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <attribute>
+         <name>dataformatas</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <attribute>
+         <name>accesskey</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Sets the access key for this element.</description>
+      </attribute>
+      <attribute>
+         <name>disabled</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: When true, this element cannot receive focus.</description>
+      </attribute>
+      <attribute>
+         <name>onblur</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element loses focus.</description>
+      </attribute>
+      <attribute>
+         <name>onfocus</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element receives focus.</description>
+      </attribute>
+      <attribute>
+         <name>onchange</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element is modified.</description>
+      </attribute>
+      <attribute>
+         <name>onselect</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element is selected.</description>
+      </attribute>
+      <attribute>
+         <name>tabindex</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies the position of this element within the tab order of the document.</description>
+      </attribute>
+      <attribute>
+         <name>readonly</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        HTML: When true, indicates that this component cannot be modified by the user.
+        The element may receive focus unless it has also been disabled.
+    </description>
+      </attribute>
+      <attribute>
+         <name>cols</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: The width of this element, in characters.</description>
+      </attribute>
+      <attribute>
+         <name>rows</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: The height of this element, in characters.</description>
+      </attribute>
+      <!-- HTML 4.0 universal attributes -->
+      <attribute>
+         <name>dir</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The direction of text display, either 'ltr' (left-to-right) or 'rtl' (right-to-left).</description>
+      </attribute>
+      <attribute>
+         <name>lang</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The base language of this document.</description>
+      </attribute>
+      <attribute>
+         <name>style</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: CSS styling instructions.</description>
+      </attribute>
+      <attribute>
+         <name>title</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: An advisory title for this element.  Often used by the user agent as a tooltip.</description>
+      </attribute>
+      <attribute>
+         <name>styleClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class for this element.  Corresponds to the HTML 'class' attribute.</description>
+      </attribute>
+      <!-- HTML 4.0 event-handler attributes -->
+      <attribute>
+         <name>onclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is clicked.</description>
+      </attribute>
+      <attribute>
+         <name>ondblclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is double-clicked.</description>
+      </attribute>
+      <attribute>
+         <name>onmousedown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is released over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseover</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved into this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmousemove</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved while it is in this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseout</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moves out of this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeypress</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeydown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed down over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeyup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is released over this element.</description>
+      </attribute>
+   </tag>
+   <!-- message -->
+   <tag>
+      <name>message</name>
+      <tag-class>org.apache.myfaces.taglib.html.HtmlMessageTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            Renders the first FacesMessage that is assigned to the component
+            referenced by the "for" attribute.
+
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+        </description>
+      <!-- all standard attributes of the message tag -->
+      <!-- UIMessage attributes -->
+      <!-- UIComponent attributes -->
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rendered</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether this component should be rendered.
+        Default value: true.
+    </description>
+      </attribute>
+      <attribute>
+         <name>for</name>
+         <required>true</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        An EL expression, returning a String, with the unique ID of the component 
+        for which messages should be displayed.  This string has the same format
+        as that accepted by the UIComponent.findComponent() method.
+    </description>
+      </attribute>
+      <attribute>
+         <name>showSummary</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        An EL expression, returning a boolean, that controls whether the
+        summary text of the associated messages is displayed.  Default: true.
+    </description>
+      </attribute>
+      <attribute>
+         <name>showDetail</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        An EL expression, returning a boolean, that controls whether the
+        detail text of the associated messages is displayed.  Default: false.
+    </description>
+      </attribute>
+      <!-- HTML 4.0 universal attributes -->
+      <attribute>
+         <name>dir</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The direction of text display, either 'ltr' (left-to-right) or 'rtl' (right-to-left).</description>
+      </attribute>
+      <attribute>
+         <name>lang</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The base language of this document.</description>
+      </attribute>
+      <attribute>
+         <name>style</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: CSS styling instructions.</description>
+      </attribute>
+      <attribute>
+         <name>title</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: An advisory title for this element.  Often used by the user agent as a tooltip.</description>
+      </attribute>
+      <attribute>
+         <name>styleClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class for this element.  Corresponds to the HTML 'class' attribute.</description>
+      </attribute>
+      <!-- HTML 4.0 event-handler attributes -->
+      <attribute>
+         <name>onclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is clicked.</description>
+      </attribute>
+      <attribute>
+         <name>ondblclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is double-clicked.</description>
+      </attribute>
+      <attribute>
+         <name>onmousedown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is released over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseover</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved into this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmousemove</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved while it is in this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseout</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moves out of this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeypress</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeydown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed down over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeyup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is released over this element.</description>
+      </attribute>
+      <!-- HtmlMessage attributes -->
+      <attribute>
+         <name>infoClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>CSS class to be used for messages with severity "INFO".</description>
+      </attribute>
+      <attribute>
+         <name>infoStyle</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>CSS style to be used for messages with severity "INFO".</description>
+      </attribute>
+      <attribute>
+         <name>warnClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>CSS class to be used for messages with severity "WARN".</description>
+      </attribute>
+      <attribute>
+         <name>warnStyle</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>CSS style to be used for messages with severity "WARN".</description>
+      </attribute>
+      <attribute>
+         <name>errorClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>CSS class to be used for messages with severity "ERROR".</description>
+      </attribute>
+      <attribute>
+         <name>errorStyle</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>CSS style to be used for messages with severity "ERROR".</description>
+      </attribute>
+      <attribute>
+         <name>fatalClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>CSS class to be used for messages with severity "FATAL".</description>
+      </attribute>
+      <attribute>
+         <name>fatalStyle</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>CSS style to be used for messages with severity "FATAL".</description>
+      </attribute>
+      <attribute>
+         <name>tooltip</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+                If true, the message summary will be rendered as a tooltip (i.e. HTML title attribute).
+            </description>
+      </attribute>
+   </tag>
+   <!-- messages -->
+   <tag>
+      <name>messages</name>
+      <tag-class>org.apache.myfaces.taglib.html.HtmlMessagesTag</tag-class>
+      <body-content>JSP</body-content>
+      <description> 
+            Renders all or some FacesMessages depending on the "for" and
+            "globalOnly" attributes:&lt;br&gt;
+            &lt;ul&gt;
+             &lt;li&gt;If globalOnly = true, only global messages, that have no
+               associated clientId, will be displayed.&lt;/li&gt;
+            &lt;li&gt;else if there is a "for" attribute, only messages that are
+               assigned to the component referenced by the "for" attribute
+               are displayed.&lt;/li&gt;
+            &lt;li&gt;else all messages are displayed.&lt;/li&gt;
+           &lt;/ul&gt;
+
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+            
+        </description>
+      <!-- all standard attributes of the messages tag -->
+      <!-- UIMessages attributes -->
+      <!-- UIComponent attributes -->
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rendered</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether this component should be rendered.
+        Default value: true.
+    </description>
+      </attribute>
+      <attribute>
+         <name>showSummary</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that controls whether the summary text of the
+        associated messages is displayed.  Default: true.
+    </description>
+      </attribute>
+      <attribute>
+         <name>showDetail</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that controls whether the detail text of the
+        associated messages is displayed.  Default: false.
+    </description>
+      </attribute>
+      <attribute>
+         <name>globalOnly</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that controls whether global messages (those without
+        IDs) should be displayed. Default: true.
+    </description>
+      </attribute>
+      <!-- HTML 4.0 universal attributes -->
+      <attribute>
+         <name>dir</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The direction of text display, either 'ltr' (left-to-right) or 'rtl' (right-to-left).</description>
+      </attribute>
+      <attribute>
+         <name>lang</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The base language of this document.</description>
+      </attribute>
+      <attribute>
+         <name>style</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: CSS styling instructions.</description>
+      </attribute>
+      <attribute>
+         <name>title</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: An advisory title for this element.  Often used by the user agent as a tooltip.</description>
+      </attribute>
+      <attribute>
+         <name>styleClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class for this element.  Corresponds to the HTML 'class' attribute.</description>
+      </attribute>
+      <!-- HTML 4.0 event-handler attributes -->
+      <attribute>
+         <name>onclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is clicked.</description>
+      </attribute>
+      <attribute>
+         <name>ondblclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is double-clicked.</description>
+      </attribute>
+      <attribute>
+         <name>onmousedown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is released over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseover</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved into this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmousemove</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved while it is in this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseout</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moves out of this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeypress</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeydown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed down over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeyup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is released over this element.</description>
+      </attribute>
+      <!-- HtmlMessages attributes -->
+      <attribute>
+         <name>infoClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>CSS class to be used for messages with severity "INFO".</description>
+      </attribute>
+      <attribute>
+         <name>infoStyle</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>CSS style to be used for messages with severity "INFO".</description>
+      </attribute>
+      <attribute>
+         <name>warnClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>CSS class to be used for messages with severity "WARN".</description>
+      </attribute>
+      <attribute>
+         <name>warnStyle</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>CSS style to be used for messages with severity "WARN".</description>
+      </attribute>
+      <attribute>
+         <name>errorClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>CSS class to be used for messages with severity "ERROR".</description>
+      </attribute>
+      <attribute>
+         <name>errorStyle</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>CSS style to be used for messages with severity "ERROR".</description>
+      </attribute>
+      <attribute>
+         <name>fatalClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>CSS class to be used for messages with severity "FATAL".</description>
+      </attribute>
+      <attribute>
+         <name>fatalStyle</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>CSS style to be used for messages with severity "FATAL".</description>
+      </attribute>
+      <attribute>
+         <name>layout</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The layout: "table" or "list". Default: list</description>
+      </attribute>
+      <attribute>
+         <name>tooltip</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+                If true, the message summary will be rendered as a tooltip (i.e. HTML title attribute).
+            </description>
+      </attribute>
+   </tag>
+   <!-- outputLabel -->
+   <tag>
+      <name>outputLabel</name>
+      <tag-class>org.apache.myfaces.taglib.html.HtmlOutputLabelTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            Renders a HTML label element.
+        
+            In addition to the JSF specification, MyFaces allows it to directly
+            give an output text via the "value" attribute.
+        
+
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+        </description>
+      <!-- all standard attributes of the outputLabel tag -->
+      <!-- UIOutput attributes -->
+      <!-- UIComponent attributes -->
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rendered</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether this component should be rendered.
+        Default value: true.
+    </description>
+      </attribute>
+      <attribute>
+         <name>value</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>The initial value of this component.</description>
+      </attribute>
+      <attribute>
+         <name>converter</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        An expression that specifies the Converter for this component.  
+        If the value binding expression is a String, the String is used
+        as an ID to look up a Converter. If the value binding expression
+        is a Converter, uses that instance as the converter.
+            
+        The value can either be a static value (ID case only) or an EL expression.
+    </description>
+      </attribute>
+      <!-- HTML 4.0 universal attributes -->
+      <attribute>
+         <name>dir</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The direction of text display, either 'ltr' (left-to-right) or 'rtl' (right-to-left).</description>
+      </attribute>
+      <attribute>
+         <name>lang</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The base language of this document.</description>
+      </attribute>
+      <attribute>
+         <name>style</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: CSS styling instructions.</description>
+      </attribute>
+      <attribute>
+         <name>title</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: An advisory title for this element.  Often used by the user agent as a tooltip.</description>
+      </attribute>
+      <attribute>
+         <name>styleClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class for this element.  Corresponds to the HTML 'class' attribute.</description>
+      </attribute>
+      <!-- HTML 4.0 event-handler attributes -->
+      <attribute>
+         <name>onclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is clicked.</description>
+      </attribute>
+      <attribute>
+         <name>ondblclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is double-clicked.</description>
+      </attribute>
+      <attribute>
+         <name>onmousedown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is released over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseover</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved into this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmousemove</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved while it is in this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseout</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moves out of this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeypress</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeydown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed down over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeyup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is released over this element.</description>
+      </attribute>
+      <!-- HTML 4.0 label attributes -->
+      <attribute>
+         <name>accesskey</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Sets the access key for this element.</description>
+      </attribute>
+      <attribute>
+         <name>onblur</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element loses focus.</description>
+      </attribute>
+      <attribute>
+         <name>onfocus</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element receives focus.</description>
+      </attribute>
+      <!-- "for" is a specific LabelRenderer attribute -->
+      <!-- LabelRenderer attributes -->
+      <attribute>
+         <name>for</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The client ID of the target input element of this label.</description>
+      </attribute>
+   </tag>
+   <!-- output_link -->
+   <tag>
+      <name>outputLink</name>
+      <tag-class>org.apache.myfaces.taglib.html.HtmlOutputLinkTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            Renders a HTML a element.  Child f:param elements are added to the href
+            attribute as query parameters.  Other children are rendered as the link text or image.
+
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+        </description>
+      <!-- UIOutput attributes -->
+      <!-- UIComponent attributes -->
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rendered</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether this component should be rendered.
+        Default value: true.
+    </description>
+      </attribute>
+      <attribute>
+         <name>value</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>The initial value of this component.</description>
+      </attribute>
+      <attribute>
+         <name>converter</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        An expression that specifies the Converter for this component.  
+        If the value binding expression is a String, the String is used
+        as an ID to look up a Converter. If the value binding expression
+        is a Converter, uses that instance as the converter.
+            
+        The value can either be a static value (ID case only) or an EL expression.
+    </description>
+      </attribute>
+      <!-- HTML 4.0 universal attributes -->
+      <attribute>
+         <name>dir</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The direction of text display, either 'ltr' (left-to-right) or 'rtl' (right-to-left).</description>
+      </attribute>
+      <attribute>
+         <name>lang</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The base language of this document.</description>
+      </attribute>
+      <attribute>
+         <name>style</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: CSS styling instructions.</description>
+      </attribute>
+      <attribute>
+         <name>title</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: An advisory title for this element.  Often used by the user agent as a tooltip.</description>
+      </attribute>
+      <attribute>
+         <name>styleClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class for this element.  Corresponds to the HTML 'class' attribute.</description>
+      </attribute>
+      <!-- HTML 4.0 event-handler attributes -->
+      <attribute>
+         <name>onclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is clicked.</description>
+      </attribute>
+      <attribute>
+         <name>ondblclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is double-clicked.</description>
+      </attribute>
+      <attribute>
+         <name>onmousedown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is released over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseover</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved into this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmousemove</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved while it is in this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseout</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moves out of this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeypress</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeydown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed down over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeyup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is released over this element.</description>
+      </attribute>
+      <!-- HTML 4.0 anchor (=a) attributes -->
+      <attribute>
+         <name>accesskey</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Sets the access key for this element.</description>
+      </attribute>
+      <attribute>
+         <name>charset</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies the character encoding of the linked resource.</description>
+      </attribute>
+      <attribute>
+         <name>tabindex</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies the position of this element within the tab order of the document.</description>
+      </attribute>
+      <attribute>
+         <name>onblur</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element loses focus.</description>
+      </attribute>
+      <attribute>
+         <name>onfocus</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element receives focus.</description>
+      </attribute>
+      <attribute>
+         <name>type</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: A hint to the user agent about the content type of the linked resource.</description>
+      </attribute>
+      <attribute>
+         <name>target</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Names the frame that should display content generated by invoking this action. </description>
+      </attribute>
+      <attribute>
+         <name>coords</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: The coordinates of regions within a client side image map.</description>
+      </attribute>
+      <!-- "href" is a special LinkRenderer attribute -->
+      <attribute>
+         <name>hreflang</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: The language of the linked resource.</description>
+      </attribute>
+      <!-- "name" cannot be set by user -->
+      <attribute>
+         <name>rel</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+                HTML: The relationship between the current document and
+                the linked resource.
+            </description>
+      </attribute>
+      <attribute>
+         <name>rev</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+                HTML: The type(s) describing the reverse link for the linked
+                resource.
+            </description>
+      </attribute>
+      <attribute>
+         <name>shape</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+                HTML: The shape of a region in a client side image map.
+            </description>
+      </attribute>
+   </tag>
+   <!-- output_message -->
+   <tag>
+      <name>outputFormat</name>
+      <tag-class>org.apache.myfaces.taglib.html.HtmlOutputFormatTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            Renders as text, applying the child f:param values to the value
+            attribute as a MessageFormat string.  If this element has an ID
+            or CSS style properties, the text is wrapped in a span element.
+
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+        </description>
+      <!-- UIOutput attributes -->
+      <!-- UIComponent attributes -->
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rendered</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether this component should be rendered.
+        Default value: true.
+    </description>
+      </attribute>
+      <attribute>
+         <name>value</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>The initial value of this component.</description>
+      </attribute>
+      <attribute>
+         <name>converter</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        An expression that specifies the Converter for this component.  
+        If the value binding expression is a String, the String is used
+        as an ID to look up a Converter. If the value binding expression
+        is a Converter, uses that instance as the converter.
+            
+        The value can either be a static value (ID case only) or an EL expression.
+    </description>
+      </attribute>
+      <!-- HTML 4.0 universal attributes -->
+      <attribute>
+         <name>dir</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The direction of text display, either 'ltr' (left-to-right) or 'rtl' (right-to-left).</description>
+      </attribute>
+      <attribute>
+         <name>lang</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The base language of this document.</description>
+      </attribute>
+      <attribute>
+         <name>style</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: CSS styling instructions.</description>
+      </attribute>
+      <attribute>
+         <name>title</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: An advisory title for this element.  Often used by the user agent as a tooltip.</description>
+      </attribute>
+      <attribute>
+         <name>styleClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class for this element.  Corresponds to the HTML 'class' attribute.</description>
+      </attribute>
+      <!-- HTML 4.0 event-handler attributes -->
+      <attribute>
+         <name>onclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is clicked.</description>
+      </attribute>
+      <attribute>
+         <name>ondblclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is double-clicked.</description>
+      </attribute>
+      <attribute>
+         <name>onmousedown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is released over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseover</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved into this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmousemove</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved while it is in this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseout</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moves out of this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeypress</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeydown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed down over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeyup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is released over this element.</description>
+      </attribute>
+      <attribute>
+         <name>escape</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+                Indicates whether rendered markup should be escaped.
+                Default: true
+            </description>
+      </attribute>
+   </tag>
+   <!-- output_text -->
+   <tag>
+      <name>outputText</name>
+      <tag-class>org.apache.myfaces.taglib.html.HtmlOutputTextTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            Renders the value of the associated UIOutput component.  If this
+            element has an ID or CSS style properties, the text is wrapped in
+            a span element.
+
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+        </description>
+      <!-- UIOutput attributes -->
+      <!-- UIComponent attributes -->
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rendered</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether this component should be rendered.
+        Default value: true.
+    </description>
+      </attribute>
+      <attribute>
+         <name>value</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>The initial value of this component.</description>
+      </attribute>
+      <attribute>
+         <name>converter</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        An expression that specifies the Converter for this component.  
+        If the value binding expression is a String, the String is used
+        as an ID to look up a Converter. If the value binding expression
+        is a Converter, uses that instance as the converter.
+            
+        The value can either be a static value (ID case only) or an EL expression.
+    </description>
+      </attribute>
+      <!-- HTML 4.0 universal attributes -->
+      <attribute>
+         <name>dir</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The direction of text display, either 'ltr' (left-to-right) or 'rtl' (right-to-left).</description>
+      </attribute>
+      <attribute>
+         <name>lang</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The base language of this document.</description>
+      </attribute>
+      <attribute>
+         <name>style</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: CSS styling instructions.</description>
+      </attribute>
+      <attribute>
+         <name>title</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: An advisory title for this element.  Often used by the user agent as a tooltip.</description>
+      </attribute>
+      <attribute>
+         <name>styleClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class for this element.  Corresponds to the HTML 'class' attribute.</description>
+      </attribute>
+      <!-- HTML 4.0 event-handler attributes -->
+      <attribute>
+         <name>onclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is clicked.</description>
+      </attribute>
+      <attribute>
+         <name>ondblclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is double-clicked.</description>
+      </attribute>
+      <attribute>
+         <name>onmousedown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is released over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseover</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved into this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmousemove</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved while it is in this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseout</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moves out of this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeypress</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeydown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed down over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeyup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is released over this element.</description>
+      </attribute>
+      <attribute>
+         <name>escape</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+                Indicates whether rendered markup should be escaped.
+                Default: true
+            </description>
+      </attribute>
+   </tag>
+   <!-- panel_grid -->
+   <tag>
+      <name>panelGrid</name>
+      <tag-class>org.apache.myfaces.taglib.html.HtmlPanelGridTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            This element renders as an HTML table with specified number of
+            columns.  Children of this element are rendered as cells in the
+            table, filling rows from left to right.  Facets named "header"
+            and "footer" are optional and specify the content of the thead
+            and tfoot rows, respectively.
+
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+        </description>
+      <!-- UIPanel attributes -->
+      <!-- UIComponent attributes -->
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rendered</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether this component should be rendered.
+        Default value: true.
+    </description>
+      </attribute>
+      <!-- HTML 4.0 universal attributes -->
+      <attribute>
+         <name>dir</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The direction of text display, either 'ltr' (left-to-right) or 'rtl' (right-to-left).</description>
+      </attribute>
+      <attribute>
+         <name>lang</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The base language of this document.</description>
+      </attribute>
+      <attribute>
+         <name>style</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: CSS styling instructions.</description>
+      </attribute>
+      <attribute>
+         <name>title</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: An advisory title for this element.  Often used by the user agent as a tooltip.</description>
+      </attribute>
+      <attribute>
+         <name>styleClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class for this element.  Corresponds to the HTML 'class' attribute.</description>
+      </attribute>
+      <!-- HTML 4.0 event-handler attributes -->
+      <attribute>
+         <name>onclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is clicked.</description>
+      </attribute>
+      <attribute>
+         <name>ondblclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is double-clicked.</description>
+      </attribute>
+      <attribute>
+         <name>onmousedown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is released over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseover</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved into this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmousemove</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved while it is in this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseout</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moves out of this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeypress</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeydown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed down over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeyup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is released over this element.</description>
+      </attribute>
+      <!-- HTML 4.0 table attributes -->
+      <attribute>
+         <name>align</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Specifies the horizontal alignment of this element.  Deprecated in HTML 4.01.</description>
+      </attribute>
+      <attribute>
+         <name>border</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies the width of the border of this element, in pixels.  Deprecated in HTML 4.01.</description>
+      </attribute>
+      <attribute>
+         <name>bgcolor</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The background color of this element.</description>
+      </attribute>
+      <attribute>
+         <name>datafld</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <attribute>
+         <name>datasrc</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <attribute>
+         <name>dataformatas</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <attribute>
+         <name>cellpadding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+        HTML: Specifies the amount of empty space between the cell border and
+        its contents.  It can be either a pixel length or a percentage.
+    </description>
+      </attribute>
+      <attribute>
+         <name>cellspacing</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+        HTML: Specifies the amount of space between the cells of the table.
+        It can be either a pixel length or a percentage of available 
+        space.
+    </description>
+      </attribute>
+      <attribute>
+         <name>frame</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+        HTML: Controls what part of the frame that surrounds a table is 
+        visible.  Values include:  void, above, below, hsides, lhs, 
+        rhs, vsides, box, and border.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rules</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+        HTML: Controls how rules are rendered between cells.  Values include:
+        none, groups, rows, cols, and all.
+    </description>
+      </attribute>
+      <attribute>
+         <name>summary</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+        HTML: Provides a summary of the contents of the table, for
+        accessibility purposes.
+    </description>
+      </attribute>
+      <attribute>
+         <name>width</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+        HTML: Specifies the desired width of the table, as a pixel length or
+        a percentage of available space.
+    </description>
+      </attribute>
+      <attribute>
+         <name>columnClasses</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+        A comma separated list of CSS class names to apply to td elements in
+        each column.
+    </description>
+      </attribute>
+      <attribute>
+         <name>footerClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class to be applied to footer cells.</description>
+      </attribute>
+      <attribute>
+         <name>headerClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class to be applied to header cells.</description>
+      </attribute>
+      <attribute>
+         <name>rowClasses</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>
+        A comma separated list of CSS class names to apply to td elements in
+        each row.
+    </description>
+      </attribute>
+      <!-- GridRenderer attributes -->
+      <attribute>
+         <name>columns</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Specifies the number of columns in the grid.</description>
+      </attribute>
+   </tag>
+   <tag>
+      <name>panelGroup</name>
+      <tag-class>org.apache.myfaces.taglib.html.HtmlPanelGroupTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            This element is used to group other components where the
+            specification requires one child element. If any of the HTML or
+            CSS attributes are set, its content is rendered within a span element.
+
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+        </description>
+      <!-- all standard attributes of the panelGroup tag -->
+      <!-- UIPanel attributes -->
+      <!-- UIComponent attributes -->
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rendered</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether this component should be rendered.
+        Default value: true.
+    </description>
+      </attribute>
+      <!-- HTML 4.0 universal attributes -->
+      <attribute>
+         <name>dir</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The direction of text display, either 'ltr' (left-to-right) or 'rtl' (right-to-left).</description>
+      </attribute>
+      <attribute>
+         <name>lang</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The base language of this document.</description>
+      </attribute>
+      <attribute>
+         <name>style</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: CSS styling instructions.</description>
+      </attribute>
+      <attribute>
+         <name>title</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: An advisory title for this element.  Often used by the user agent as a tooltip.</description>
+      </attribute>
+      <attribute>
+         <name>styleClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class for this element.  Corresponds to the HTML 'class' attribute.</description>
+      </attribute>
+      <!-- HTML 4.0 event-handler attributes -->
+      <attribute>
+         <name>onclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is clicked.</description>
+      </attribute>
+      <attribute>
+         <name>ondblclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is double-clicked.</description>
+      </attribute>
+      <attribute>
+         <name>onmousedown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is released over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseover</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved into this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmousemove</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved while it is in this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseout</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moves out of this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeypress</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeydown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed down over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeyup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is released over this element.</description>
+      </attribute>
+   </tag>
+   <tag>
+      <name>selectBooleanCheckbox</name>
+      <tag-class>org.apache.myfaces.taglib.html.HtmlSelectBooleanCheckboxTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            Allow the user to choose a "true" or "false" value, presented as a
+            checkbox.
+            &lt;p&gt;
+            Renders as an HTML input tag with its type set to "checkbox", and
+            its name attribute set to the id. The "checked" attribute is rendered
+            if the value of this component is true.
+            &lt;p&gt;
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+            
+        </description>
+      <!-- UISelectBoolean attributes -->
+      <!-- "selected" attribute is covered by HTML "checked" attribute -->
+      <!-- UIInput attributes -->
+      <!-- UIOutput attributes -->
+      <!-- UIComponent attributes -->
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rendered</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether this component should be rendered.
+        Default value: true.
+    </description>
+      </attribute>
+      <attribute>
+         <name>value</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>The initial value of this component.</description>
+      </attribute>
+      <attribute>
+         <name>converter</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        An expression that specifies the Converter for this component.  
+        If the value binding expression is a String, the String is used
+        as an ID to look up a Converter. If the value binding expression
+        is a Converter, uses that instance as the converter.
+            
+        The value can either be a static value (ID case only) or an EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>immediate</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that identifies the phase during which value change
+        events should fire. During normal event processing, value change
+        events are fired during the "invoke application" phase of request
+        processing. If this attribute is set to "true", these methods are
+        fired instead at the end of the "apply request values" phase.
+    </description>
+      </attribute>
+      <attribute>
+         <name>required</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether an input value is required.
+        If this value is true, and no input value is provided, the error
+        message javax.faces.component.UIInput.REQUIRED is posted.
+    </description>
+      </attribute>
+      <attribute>
+         <name>validator</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A method binding EL expression, accepting FacesContext, UIComponent,
+        and Object parameters, and returning void, that validates the
+        component's local value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>valueChangeListener</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A method binding EL expression, accepting a ValueChangeEvent parameter
+        and returning void. The specified method is invoked if this component
+        is modified. The phase that this handler is fired in can be controlled
+        via the immediate attribute.
+    </description>
+      </attribute>
+      <!-- HTML 4.0 universal attributes -->
+      <attribute>
+         <name>dir</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The direction of text display, either 'ltr' (left-to-right) or 'rtl' (right-to-left).</description>
+      </attribute>
+      <attribute>
+         <name>lang</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The base language of this document.</description>
+      </attribute>
+      <attribute>
+         <name>style</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: CSS styling instructions.</description>
+      </attribute>
+      <attribute>
+         <name>title</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: An advisory title for this element.  Often used by the user agent as a tooltip.</description>
+      </attribute>
+      <attribute>
+         <name>styleClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class for this element.  Corresponds to the HTML 'class' attribute.</description>
+      </attribute>
+      <!-- HTML 4.0 event-handler attributes -->
+      <attribute>
+         <name>onclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is clicked.</description>
+      </attribute>
+      <attribute>
+         <name>ondblclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is double-clicked.</description>
+      </attribute>
+      <attribute>
+         <name>onmousedown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is released over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseover</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved into this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmousemove</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved while it is in this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseout</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moves out of this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeypress</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeydown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed down over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeyup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is released over this element.</description>
+      </attribute>
+      <!-- HTML 4.0 input attributes for type "checkbox" -->
+      <attribute>
+         <name>accesskey</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Sets the access key for this element.</description>
+      </attribute>
+      <attribute>
+         <name>alt</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies alternative text that can be used by a browser that can't show this element.</description>
+      </attribute>
+      <attribute>
+         <name>datafld</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <attribute>
+         <name>datasrc</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <attribute>
+         <name>dataformatas</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <attribute>
+         <name>disabled</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: When true, this element cannot receive focus.</description>
+      </attribute>
+      <attribute>
+         <name>onblur</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element loses focus.</description>
+      </attribute>
+      <attribute>
+         <name>onfocus</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element receives focus.</description>
+      </attribute>
+      <attribute>
+         <name>onchange</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element is modified.</description>
+      </attribute>
+      <attribute>
+         <name>onselect</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element is selected.</description>
+      </attribute>
+      <attribute>
+         <name>readonly</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        HTML: When true, indicates that this component cannot be modified by the user.
+        The element may receive focus unless it has also been disabled.
+    </description>
+      </attribute>
+      <attribute>
+         <name>tabindex</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies the position of this element within the tab order of the document.</description>
+      </attribute>
+   </tag>
+   <tag>
+      <name>selectManyCheckbox</name>
+      <tag-class>org.apache.myfaces.taglib.html.HtmlSelectManyCheckboxTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            Allow the user to select zero or more items from a set of
+            available options. This is presented as a table with one cell per
+            available option; each cell contains a checkbox and the option's
+            label. The "layout" attribute determines whether the checkboxes
+            are laid out horizontally or vertically.
+            &lt;p&gt;
+            The set of available options is defined by adding child
+            f:selectItem or f:selectItems components to this component.
+            &lt;p&gt;
+            The value attribute must be a value-binding expression to a
+            property of type List, Object array or primitive array. That
+            "collection" is expected to contain objects of the same type as
+            SelectItem.getValue() returns for the child SelectItem objects.
+            On rendering, any child whose value is in the list will be
+            selected initially. During the update phase, the property setter
+            is called to replace the original collection with a completely
+            new collection object of the appropriate type. The new collection
+            object contains the value of each child SelectItem object that
+            is currently selected.
+            &lt;p&gt;
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+            
+        </description>
+      <!-- all standard attributes of the selectManyCheckbox tag -->
+      <!-- UISelectMany attributes -->
+      <!-- UIInput attributes -->
+      <!-- UIOutput attributes -->
+      <!-- UIComponent attributes -->
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rendered</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether this component should be rendered.
+        Default value: true.
+    </description>
+      </attribute>
+      <attribute>
+         <name>value</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>The initial value of this component.</description>
+      </attribute>
+      <attribute>
+         <name>converter</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        An expression that specifies the Converter for this component.  
+        If the value binding expression is a String, the String is used
+        as an ID to look up a Converter. If the value binding expression
+        is a Converter, uses that instance as the converter.
+            
+        The value can either be a static value (ID case only) or an EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>immediate</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that identifies the phase during which value change
+        events should fire. During normal event processing, value change
+        events are fired during the "invoke application" phase of request
+        processing. If this attribute is set to "true", these methods are
+        fired instead at the end of the "apply request values" phase.
+    </description>
+      </attribute>
+      <attribute>
+         <name>required</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether an input value is required.
+        If this value is true, and no input value is provided, the error
+        message javax.faces.component.UIInput.REQUIRED is posted.
+    </description>
+      </attribute>
+      <attribute>
+         <name>validator</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A method binding EL expression, accepting FacesContext, UIComponent,
+        and Object parameters, and returning void, that validates the
+        component's local value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>valueChangeListener</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A method binding EL expression, accepting a ValueChangeEvent parameter
+        and returning void. The specified method is invoked if this component
+        is modified. The phase that this handler is fired in can be controlled
+        via the immediate attribute.
+    </description>
+      </attribute>
+      <!-- HTML 4.0 universal attributes -->
+      <attribute>
+         <name>dir</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The direction of text display, either 'ltr' (left-to-right) or 'rtl' (right-to-left).</description>
+      </attribute>
+      <attribute>
+         <name>lang</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The base language of this document.</description>
+      </attribute>
+      <attribute>
+         <name>style</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: CSS styling instructions.</description>
+      </attribute>
+      <attribute>
+         <name>title</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: An advisory title for this element.  Often used by the user agent as a tooltip.</description>
+      </attribute>
+      <attribute>
+         <name>styleClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class for this element.  Corresponds to the HTML 'class' attribute.</description>
+      </attribute>
+      <!-- HTML 4.0 event-handler attributes -->
+      <attribute>
+         <name>onclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is clicked.</description>
+      </attribute>
+      <attribute>
+         <name>ondblclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is double-clicked.</description>
+      </attribute>
+      <attribute>
+         <name>onmousedown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is released over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseover</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved into this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmousemove</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved while it is in this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseout</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moves out of this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeypress</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeydown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed down over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeyup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is released over this element.</description>
+      </attribute>
+      <!-- HTML 4.0 input attributes for type "checkbox" -->
+      <attribute>
+         <name>accesskey</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Sets the access key for this element.</description>
+      </attribute>
+      <attribute>
+         <name>alt</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies alternative text that can be used by a browser that can't show this element.</description>
+      </attribute>
+      <attribute>
+         <name>datafld</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <attribute>
+         <name>datasrc</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <attribute>
+         <name>dataformatas</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <attribute>
+         <name>disabled</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: When true, this element cannot receive focus.</description>
+      </attribute>
+      <attribute>
+         <name>onblur</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element loses focus.</description>
+      </attribute>
+      <attribute>
+         <name>onfocus</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element receives focus.</description>
+      </attribute>
+      <attribute>
+         <name>onchange</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element is modified.</description>
+      </attribute>
+      <attribute>
+         <name>onselect</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element is selected.</description>
+      </attribute>
+      <attribute>
+         <name>readonly</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        HTML: When true, indicates that this component cannot be modified by the user.
+        The element may receive focus unless it has also been disabled.
+    </description>
+      </attribute>
+      <attribute>
+         <name>tabindex</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies the position of this element within the tab order of the document.</description>
+      </attribute>
+      <!-- CheckboxListRenderer attributes -->
+      <attribute>
+         <name>layout</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>Controls the layout direction of the child elements.  Values include:  
+	lineDirection (vertical) and pageDirection (horzontal).</description>
+      </attribute>
+      <!--TODO: disabledClass, enabledClass -->
+      <attribute>
+         <name>enabledClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class assigned to the label element for enabled choices.</description>
+      </attribute>
+      <attribute>
+         <name>disabledClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class assigned to the label element for enabled choices.</description>
+      </attribute>
+   </tag>
+   <tag>
+      <name>selectManyListbox</name>
+      <tag-class>org.apache.myfaces.taglib.html.HtmlSelectManyListboxTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            Allow the user to select zero or more items from a set of
+            available options. This is presented as a listbox which allows
+            multiple rows in the list to be selected simultaneously.
+            &lt;p&gt;
+            The set of available options is defined by adding child
+            f:selectItem or f:selectItems components to this component.
+            &lt;p&gt;
+            The list is rendered as an HTML select element. The "multiple"
+            attribute is set on the element and the size attribute is set to
+            the provided value, defaulting to the number of items in the list
+            if no value is provided. If the size is set to 1, then a
+            "drop-down" list (aka "combo-box") is presented, though if this is
+            the intention then a selectManyMenu should be used instead.
+            &lt;p&gt;
+            The value attribute must be a value-binding expression to a
+            property of type List, Object array or primitive array. That
+            "collection" is expected to contain objects of the same type as
+            SelectItem.getValue() returns for the child SelectItem objects.
+            On rendering, any child whose value is in the list will be
+            selected initially. During the update phase, the property is set
+            to contain a "collection" of values for those child SelectItem
+            objects that are currently selected.
+            &lt;p&gt;
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+            
+        </description>
+      <!-- UISelectMany attributes -->
+      <!-- UIInput attributes -->
+      <!-- UIOutput attributes -->
+      <!-- UIComponent attributes -->
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rendered</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether this component should be rendered.
+        Default value: true.
+    </description>
+      </attribute>
+      <attribute>
+         <name>value</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>The initial value of this component.</description>
+      </attribute>
+      <attribute>
+         <name>converter</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        An expression that specifies the Converter for this component.  
+        If the value binding expression is a String, the String is used
+        as an ID to look up a Converter. If the value binding expression
+        is a Converter, uses that instance as the converter.
+            
+        The value can either be a static value (ID case only) or an EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>immediate</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that identifies the phase during which value change
+        events should fire. During normal event processing, value change
+        events are fired during the "invoke application" phase of request
+        processing. If this attribute is set to "true", these methods are
+        fired instead at the end of the "apply request values" phase.
+    </description>
+      </attribute>
+      <attribute>
+         <name>required</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether an input value is required.
+        If this value is true, and no input value is provided, the error
+        message javax.faces.component.UIInput.REQUIRED is posted.
+    </description>
+      </attribute>
+      <attribute>
+         <name>validator</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A method binding EL expression, accepting FacesContext, UIComponent,
+        and Object parameters, and returning void, that validates the
+        component's local value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>valueChangeListener</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A method binding EL expression, accepting a ValueChangeEvent parameter
+        and returning void. The specified method is invoked if this component
+        is modified. The phase that this handler is fired in can be controlled
+        via the immediate attribute.
+    </description>
+      </attribute>
+      <!-- HTML 4.0 universal attributes -->
+      <attribute>
+         <name>dir</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The direction of text display, either 'ltr' (left-to-right) or 'rtl' (right-to-left).</description>
+      </attribute>
+      <attribute>
+         <name>lang</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The base language of this document.</description>
+      </attribute>
+      <attribute>
+         <name>style</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: CSS styling instructions.</description>
+      </attribute>
+      <attribute>
+         <name>title</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: An advisory title for this element.  Often used by the user agent as a tooltip.</description>
+      </attribute>
+      <attribute>
+         <name>styleClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class for this element.  Corresponds to the HTML 'class' attribute.</description>
+      </attribute>
+      <!-- HTML 4.0 event-handler attributes -->
+      <attribute>
+         <name>onclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is clicked.</description>
+      </attribute>
+      <attribute>
+         <name>ondblclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is double-clicked.</description>
+      </attribute>
+      <attribute>
+         <name>onmousedown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is released over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseover</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved into this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmousemove</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved while it is in this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseout</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moves out of this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeypress</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeydown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed down over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeyup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is released over this element.</description>
+      </attribute>
+      <!-- HTML 4.0 select attributes -->
+      <attribute>
+         <name>onblur</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element loses focus.</description>
+      </attribute>
+      <attribute>
+         <name>onfocus</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element receives focus.</description>
+      </attribute>
+      <attribute>
+         <name>onchange</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element is modified.</description>
+      </attribute>
+      <attribute>
+         <name>tabindex</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies the position of this element within the tab order of the document.</description>
+      </attribute>
+      <attribute>
+         <name>readonly</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        HTML: When true, indicates that this component cannot be modified by the user.
+        The element may receive focus unless it has also been disabled.
+    </description>
+      </attribute>
+      <attribute>
+         <name>disabled</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: When true, this element cannot receive focus.</description>
+      </attribute>
+      <attribute>
+         <name>datafld</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <attribute>
+         <name>datasrc</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <attribute>
+         <name>dataformatas</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <!-- "multiple" cannot be set manually -->
+      <!-- "name" cannot be set manually -->
+      <!-- "size" cannot be set directly for it is a MenuRenderer specific attribute -->
+      <!-- ListboxRenderer attributes -->
+      <attribute>
+         <name>size</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>see JSF Spec.</description>
+      </attribute>
+      <attribute>
+         <name>enabledClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+      </attribute>
+      <attribute>
+         <name>disabledClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+      </attribute>
+   </tag>
+   <tag>
+      <name>selectManyMenu</name>
+      <tag-class>org.apache.myfaces.taglib.html.HtmlSelectManyMenuTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            Allow the user to select zero or more items from a set of available
+            options. This is presented as a drop-down "combo-box" which allows
+            multiple rows in the list to be selected simultaneously.
+            &lt;p&gt;
+            The set of available options is defined by adding child
+            f:selectItem or f:selectItems components to this component.
+            &lt;p&gt;
+            Renders as an HTML select element, with the choices made up of 
+            child f:selectItem or f:selectItems elements. The multiple
+            attribute is set and the size attribute is set to 1.
+            &lt;p&gt;
+            The value attribute must be a value-binding expression to a
+            property of type List, Object array or primitive array. That
+            "collection" is expected to contain objects of the same type as
+            SelectItem.getValue() returns for the child SelectItem objects.
+            On rendering, any child whose value is in the list will be
+            selected initially. During the update phase, the property is set
+            to contain a "collection" of values for those child SelectItem
+            objects that are currently selected.
+            &lt;p&gt;
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+            
+        </description>
+      <!-- UISelectMany attributes -->
+      <!-- UIInput attributes -->
+      <!-- UIOutput attributes -->
+      <!-- UIComponent attributes -->
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rendered</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether this component should be rendered.
+        Default value: true.
+    </description>
+      </attribute>
+      <attribute>
+         <name>value</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>The initial value of this component.</description>
+      </attribute>
+      <attribute>
+         <name>converter</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        An expression that specifies the Converter for this component.  
+        If the value binding expression is a String, the String is used
+        as an ID to look up a Converter. If the value binding expression
+        is a Converter, uses that instance as the converter.
+            
+        The value can either be a static value (ID case only) or an EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>immediate</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that identifies the phase during which value change
+        events should fire. During normal event processing, value change
+        events are fired during the "invoke application" phase of request
+        processing. If this attribute is set to "true", these methods are
+        fired instead at the end of the "apply request values" phase.
+    </description>
+      </attribute>
+      <attribute>
+         <name>required</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether an input value is required.
+        If this value is true, and no input value is provided, the error
+        message javax.faces.component.UIInput.REQUIRED is posted.
+    </description>
+      </attribute>
+      <attribute>
+         <name>validator</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A method binding EL expression, accepting FacesContext, UIComponent,
+        and Object parameters, and returning void, that validates the
+        component's local value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>valueChangeListener</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A method binding EL expression, accepting a ValueChangeEvent parameter
+        and returning void. The specified method is invoked if this component
+        is modified. The phase that this handler is fired in can be controlled
+        via the immediate attribute.
+    </description>
+      </attribute>
+      <!-- HTML 4.0 universal attributes -->
+      <attribute>
+         <name>dir</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The direction of text display, either 'ltr' (left-to-right) or 'rtl' (right-to-left).</description>
+      </attribute>
+      <attribute>
+         <name>lang</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The base language of this document.</description>
+      </attribute>
+      <attribute>
+         <name>style</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: CSS styling instructions.</description>
+      </attribute>
+      <attribute>
+         <name>title</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: An advisory title for this element.  Often used by the user agent as a tooltip.</description>
+      </attribute>
+      <attribute>
+         <name>styleClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class for this element.  Corresponds to the HTML 'class' attribute.</description>
+      </attribute>
+      <!-- HTML 4.0 event-handler attributes -->
+      <attribute>
+         <name>onclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is clicked.</description>
+      </attribute>
+      <attribute>
+         <name>ondblclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is double-clicked.</description>
+      </attribute>
+      <attribute>
+         <name>onmousedown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is released over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseover</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved into this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmousemove</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved while it is in this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseout</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moves out of this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeypress</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeydown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed down over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeyup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is released over this element.</description>
+      </attribute>
+      <!-- HTML 4.0 select attributes -->
+      <attribute>
+         <name>onblur</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element loses focus.</description>
+      </attribute>
+      <attribute>
+         <name>onfocus</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element receives focus.</description>
+      </attribute>
+      <attribute>
+         <name>onchange</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element is modified.</description>
+      </attribute>
+      <attribute>
+         <name>tabindex</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies the position of this element within the tab order of the document.</description>
+      </attribute>
+      <attribute>
+         <name>readonly</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        HTML: When true, indicates that this component cannot be modified by the user.
+        The element may receive focus unless it has also been disabled.
+    </description>
+      </attribute>
+      <attribute>
+         <name>disabled</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: When true, this element cannot receive focus.</description>
+      </attribute>
+      <attribute>
+         <name>datafld</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <attribute>
+         <name>datasrc</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <attribute>
+         <name>dataformatas</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <!-- "multiple" cannot be set manually -->
+      <!-- "name" cannot be set manually -->
+      <!-- "size" cannot be set directly for it is a MenuRenderer specific attribute -->
+      <attribute>
+         <name>enabledClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+      </attribute>
+      <attribute>
+         <name>disabledClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+      </attribute>
+   </tag>
+   <tag>
+      <name>selectOneListbox</name>
+      <tag-class>org.apache.myfaces.taglib.html.HtmlSelectOneListboxTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            Allow the user to choose one option from a set of options.
+            &lt;p&gt;
+            Rendered as a listbox with the MULTIPLE attribute set to false.
+            &lt;p&gt;
+            The available choices are defined via child f:selectItem or
+            f:selectItems elements. The size of the listbox defaults to the
+            number of available choices; if size is explicitly set to a
+            smaller value, then scrollbars will be rendered. If size is set
+            to 1 then a "drop-down menu" (aka "combo-box") is rendered, though
+            if this is the intent then selectOneMenu should be used instead.
+            &lt;p&gt;
+            The value attribute of this component is read to determine
+            which of the available options is initially selected; its value
+            should match the "value" property of one of the child SelectItem
+            objects.
+            &lt;p&gt;
+            On submit of the enclosing form, the value attribute's bound
+            property is updated to contain the "value" property from the
+            chosen SelectItem.
+            &lt;p&gt;
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+            
+        </description>
+      <!-- UISelectOne attributes -->
+      <!-- UIInput attributes -->
+      <!-- UIOutput attributes -->
+      <!-- UIComponent attributes -->
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rendered</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether this component should be rendered.
+        Default value: true.
+    </description>
+      </attribute>
+      <attribute>
+         <name>value</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>The initial value of this component.</description>
+      </attribute>
+      <attribute>
+         <name>converter</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        An expression that specifies the Converter for this component.  
+        If the value binding expression is a String, the String is used
+        as an ID to look up a Converter. If the value binding expression
+        is a Converter, uses that instance as the converter.
+            
+        The value can either be a static value (ID case only) or an EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>immediate</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that identifies the phase during which value change
+        events should fire. During normal event processing, value change
+        events are fired during the "invoke application" phase of request
+        processing. If this attribute is set to "true", these methods are
+        fired instead at the end of the "apply request values" phase.
+    </description>
+      </attribute>
+      <attribute>
+         <name>required</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether an input value is required.
+        If this value is true, and no input value is provided, the error
+        message javax.faces.component.UIInput.REQUIRED is posted.
+    </description>
+      </attribute>
+      <attribute>
+         <name>validator</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A method binding EL expression, accepting FacesContext, UIComponent,
+        and Object parameters, and returning void, that validates the
+        component's local value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>valueChangeListener</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A method binding EL expression, accepting a ValueChangeEvent parameter
+        and returning void. The specified method is invoked if this component
+        is modified. The phase that this handler is fired in can be controlled
+        via the immediate attribute.
+    </description>
+      </attribute>
+      <!-- HTML 4.0 universal attributes -->
+      <attribute>
+         <name>dir</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The direction of text display, either 'ltr' (left-to-right) or 'rtl' (right-to-left).</description>
+      </attribute>
+      <attribute>
+         <name>lang</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The base language of this document.</description>
+      </attribute>
+      <attribute>
+         <name>style</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: CSS styling instructions.</description>
+      </attribute>
+      <attribute>
+         <name>title</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: An advisory title for this element.  Often used by the user agent as a tooltip.</description>
+      </attribute>
+      <attribute>
+         <name>styleClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class for this element.  Corresponds to the HTML 'class' attribute.</description>
+      </attribute>
+      <!-- HTML 4.0 event-handler attributes -->
+      <attribute>
+         <name>onclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is clicked.</description>
+      </attribute>
+      <attribute>
+         <name>ondblclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is double-clicked.</description>
+      </attribute>
+      <attribute>
+         <name>onmousedown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is released over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseover</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved into this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmousemove</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved while it is in this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseout</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moves out of this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeypress</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeydown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed down over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeyup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is released over this element.</description>
+      </attribute>
+      <!-- HTML 4.0 select attributes -->
+      <attribute>
+         <name>onblur</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element loses focus.</description>
+      </attribute>
+      <attribute>
+         <name>onfocus</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element receives focus.</description>
+      </attribute>
+      <attribute>
+         <name>onchange</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element is modified.</description>
+      </attribute>
+      <attribute>
+         <name>tabindex</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies the position of this element within the tab order of the document.</description>
+      </attribute>
+      <attribute>
+         <name>readonly</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        HTML: When true, indicates that this component cannot be modified by the user.
+        The element may receive focus unless it has also been disabled.
+    </description>
+      </attribute>
+      <attribute>
+         <name>disabled</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: When true, this element cannot receive focus.</description>
+      </attribute>
+      <attribute>
+         <name>datafld</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <attribute>
+         <name>datasrc</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <attribute>
+         <name>dataformatas</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <!-- "multiple" cannot be set manually -->
+      <!-- "name" cannot be set manually -->
+      <!-- "size" cannot be set directly for it is a MenuRenderer specific attribute -->
+      <!-- ListboxRenderer attributes -->
+      <attribute>
+         <name>size</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>see JSF Spec.</description>
+      </attribute>
+      <attribute>
+         <name>enabledClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+      </attribute>
+      <attribute>
+         <name>disabledClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+      </attribute>
+   </tag>
+   <!-- selectOneMenu -->
+   <tag>
+      <name>selectOneMenu</name>
+      <tag-class>org.apache.myfaces.taglib.html.HtmlSelectOneMenuTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            Allow the user to choose one option from a set of options.
+            &lt;p&gt;
+            Renders a drop-down menu (aka "combo-box") containing a set of
+            choices, of which only one can be chosen at a time. The available
+            choices are defined via child f:selectItem or f:selectItems
+            elements.
+            &lt;p&gt;
+            The value attribute of this component is read to determine
+            which of the available options is initially selected; its value
+            should match the "value" property of one of the child SelectItem
+            objects.
+            &lt;p&gt;
+            On submit of the enclosing form, the value attribute's bound property
+            is updated to contain the "value" property from the chosen SelectItem.
+            &lt;p&gt;
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+            
+        </description>
+      <!-- all standard attributes of the selectOneMenu tag -->
+      <!-- UISelectOne attributes -->
+      <!-- UIInput attributes -->
+      <!-- UIOutput attributes -->
+      <!-- UIComponent attributes -->
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rendered</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether this component should be rendered.
+        Default value: true.
+    </description>
+      </attribute>
+      <attribute>
+         <name>value</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>The initial value of this component.</description>
+      </attribute>
+      <attribute>
+         <name>converter</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        An expression that specifies the Converter for this component.  
+        If the value binding expression is a String, the String is used
+        as an ID to look up a Converter. If the value binding expression
+        is a Converter, uses that instance as the converter.
+            
+        The value can either be a static value (ID case only) or an EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>immediate</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that identifies the phase during which value change
+        events should fire. During normal event processing, value change
+        events are fired during the "invoke application" phase of request
+        processing. If this attribute is set to "true", these methods are
+        fired instead at the end of the "apply request values" phase.
+    </description>
+      </attribute>
+      <attribute>
+         <name>required</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether an input value is required.
+        If this value is true, and no input value is provided, the error
+        message javax.faces.component.UIInput.REQUIRED is posted.
+    </description>
+      </attribute>
+      <attribute>
+         <name>validator</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A method binding EL expression, accepting FacesContext, UIComponent,
+        and Object parameters, and returning void, that validates the
+        component's local value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>valueChangeListener</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A method binding EL expression, accepting a ValueChangeEvent parameter
+        and returning void. The specified method is invoked if this component
+        is modified. The phase that this handler is fired in can be controlled
+        via the immediate attribute.
+    </description>
+      </attribute>
+      <!-- HTML 4.0 universal attributes -->
+      <attribute>
+         <name>dir</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The direction of text display, either 'ltr' (left-to-right) or 'rtl' (right-to-left).</description>
+      </attribute>
+      <attribute>
+         <name>lang</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The base language of this document.</description>
+      </attribute>
+      <attribute>
+         <name>style</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: CSS styling instructions.</description>
+      </attribute>
+      <attribute>
+         <name>title</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: An advisory title for this element.  Often used by the user agent as a tooltip.</description>
+      </attribute>
+      <attribute>
+         <name>styleClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class for this element.  Corresponds to the HTML 'class' attribute.</description>
+      </attribute>
+      <!-- HTML 4.0 event-handler attributes -->
+      <attribute>
+         <name>onclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is clicked.</description>
+      </attribute>
+      <attribute>
+         <name>ondblclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is double-clicked.</description>
+      </attribute>
+      <attribute>
+         <name>onmousedown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is released over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseover</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved into this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmousemove</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved while it is in this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseout</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moves out of this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeypress</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeydown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed down over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeyup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is released over this element.</description>
+      </attribute>
+      <!-- HTML 4.0 select attributes -->
+      <attribute>
+         <name>onblur</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element loses focus.</description>
+      </attribute>
+      <attribute>
+         <name>onfocus</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element receives focus.</description>
+      </attribute>
+      <attribute>
+         <name>onchange</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element is modified.</description>
+      </attribute>
+      <attribute>
+         <name>tabindex</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies the position of this element within the tab order of the document.</description>
+      </attribute>
+      <attribute>
+         <name>readonly</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        HTML: When true, indicates that this component cannot be modified by the user.
+        The element may receive focus unless it has also been disabled.
+    </description>
+      </attribute>
+      <attribute>
+         <name>disabled</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: When true, this element cannot receive focus.</description>
+      </attribute>
+      <attribute>
+         <name>datafld</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <attribute>
+         <name>datasrc</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <attribute>
+         <name>dataformatas</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <!-- "multiple" cannot be set manually -->
+      <!-- "name" cannot be set manually -->
+      <!-- "size" cannot be set directly for it is a MenuRenderer specific attribute -->
+      <attribute>
+         <name>enabledClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+      </attribute>
+      <attribute>
+         <name>disabledClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+      </attribute>
+   </tag>
+   <!-- selectOneRadio -->
+   <tag>
+      <name>selectOneRadio</name>
+      <tag-class>org.apache.myfaces.taglib.html.HtmlSelectOneRadioTag</tag-class>
+      <body-content>JSP</body-content>
+      <description>
+            Allow the user to choose one option from a set of options.
+            &lt;p&gt;
+            Renders as an HTML table element, containing an input element for
+            each child f:selectItem or f:selectItems elements.  The input
+            elements are rendered as type radio.
+            &lt;p&gt;
+            The value attribute of this component is read to determine
+            which of the available options is initially selected; its value should
+            match the "value" property of one of the child SelectItem objects.
+            &lt;p&gt;
+            On submit of the enclosing form, the value attribute's bound property
+            is updated to contain the "value" property from the chosen SelectItem.
+            &lt;p&gt;
+            Unless otherwise specified, all attributes accept static values
+            or EL expressions.
+            
+        </description>
+      <!-- all standard attributes of the selectOneRadio tag -->
+      <!-- UISelectOne attributes -->
+      <!-- UIInput attributes -->
+      <!-- UIOutput attributes -->
+      <!-- UIComponent attributes -->
+      <attribute>
+         <name>id</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        The developer-assigned ID of this component.  The ID must be unique
+        within the scope of the tag's enclosing naming container (e.g. 
+        h:form or f:subview).  This value must be a static value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>binding</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        Identifies a backing bean property (of type UIComponent or appropriate
+        subclass) to bind to this component instance.  This value must be an
+        EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>rendered</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether this component should be rendered.
+        Default value: true.
+    </description>
+      </attribute>
+      <attribute>
+         <name>value</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>The initial value of this component.</description>
+      </attribute>
+      <attribute>
+         <name>converter</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        An expression that specifies the Converter for this component.  
+        If the value binding expression is a String, the String is used
+        as an ID to look up a Converter. If the value binding expression
+        is a Converter, uses that instance as the converter.
+            
+        The value can either be a static value (ID case only) or an EL expression.
+    </description>
+      </attribute>
+      <attribute>
+         <name>immediate</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that identifies the phase during which value change
+        events should fire. During normal event processing, value change
+        events are fired during the "invoke application" phase of request
+        processing. If this attribute is set to "true", these methods are
+        fired instead at the end of the "apply request values" phase.
+    </description>
+      </attribute>
+      <attribute>
+         <name>required</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A boolean value that indicates whether an input value is required.
+        If this value is true, and no input value is provided, the error
+        message javax.faces.component.UIInput.REQUIRED is posted.
+    </description>
+      </attribute>
+      <attribute>
+         <name>validator</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A method binding EL expression, accepting FacesContext, UIComponent,
+        and Object parameters, and returning void, that validates the
+        component's local value.
+    </description>
+      </attribute>
+      <attribute>
+         <name>valueChangeListener</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        A method binding EL expression, accepting a ValueChangeEvent parameter
+        and returning void. The specified method is invoked if this component
+        is modified. The phase that this handler is fired in can be controlled
+        via the immediate attribute.
+    </description>
+      </attribute>
+      <!-- HTML 4.0 universal attributes -->
+      <attribute>
+         <name>dir</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The direction of text display, either 'ltr' (left-to-right) or 'rtl' (right-to-left).</description>
+      </attribute>
+      <attribute>
+         <name>lang</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: The base language of this document.</description>
+      </attribute>
+      <attribute>
+         <name>style</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: CSS styling instructions.</description>
+      </attribute>
+      <attribute>
+         <name>title</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: An advisory title for this element.  Often used by the user agent as a tooltip.</description>
+      </attribute>
+      <attribute>
+         <name>styleClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>The CSS class for this element.  Corresponds to the HTML 'class' attribute.</description>
+      </attribute>
+      <!-- HTML 4.0 event-handler attributes -->
+      <attribute>
+         <name>onclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is clicked.</description>
+      </attribute>
+      <attribute>
+         <name>ondblclick</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the element is double-clicked.</description>
+      </attribute>
+      <attribute>
+         <name>onmousedown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is released over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseover</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved into this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmousemove</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moved while it is in this element.</description>
+      </attribute>
+      <attribute>
+         <name>onmouseout</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when the pointing device is moves out of this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeypress</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeydown</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is pressed down over this element.</description>
+      </attribute>
+      <attribute>
+         <name>onkeyup</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>HTML: Script to be invoked when a key is released over this element.</description>
+      </attribute>
+      <!-- HTML 4.0 input attributes for type "radio" -->
+      <attribute>
+         <name>accesskey</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Sets the access key for this element.</description>
+      </attribute>
+      <attribute>
+         <name>alt</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies alternative text that can be used by a browser that can't show this element.</description>
+      </attribute>
+      <attribute>
+         <name>disabled</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: When true, this element cannot receive focus.</description>
+      </attribute>
+      <attribute>
+         <name>onblur</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element loses focus.</description>
+      </attribute>
+      <attribute>
+         <name>onfocus</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element receives focus.</description>
+      </attribute>
+      <attribute>
+         <name>onchange</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element is modified.</description>
+      </attribute>
+      <attribute>
+         <name>onselect</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies a script to be invoked when the element is selected.</description>
+      </attribute>
+      <attribute>
+         <name>readonly</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+        HTML: When true, indicates that this component cannot be modified by the user.
+        The element may receive focus unless it has also been disabled.
+    </description>
+      </attribute>
+      <attribute>
+         <name>tabindex</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>HTML: Specifies the position of this element within the tab order of the document.</description>
+      </attribute>
+      <attribute>
+         <name>datafld</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <attribute>
+         <name>datasrc</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <attribute>
+         <name>dataformatas</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <description>Reserved for future use.</description>
+      </attribute>
+      <!-- RadioRenderer attributes -->
+      <attribute>
+         <name>layout</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>
+                Orientation of the options list. Valid values are 
+                "pageDirection" for a vertical layout, or "lineDirection" for
+                 horizontal. The default value is "lineDirection". 
+            </description>
+      </attribute>
+      <attribute>
+         <name>border</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+         <type>java.lang.String</type>
+         <description>Width in pixels of the border to be drawn around the table containing the options list.</description>
+      </attribute>
+      <attribute>
+         <name>enabledClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+      </attribute>
+      <attribute>
+         <name>disabledClass</name>
+         <required>false</required>
+         <rtexprvalue>false</rtexprvalue>
+      </attribute>
+   </tag>
+</taglib>
diff --git a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/.settings/org.eclipse.jdt.core.prefs b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/.settings/org.eclipse.jdt.core.prefs
index 7254127..daddec6 100644
--- a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/.settings/org.eclipse.jdt.core.prefs
+++ b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,61 @@
-#Tue Apr 10 09:03:49 PDT 2007
+#Fri Jul 13 13:50:02 PDT 2007
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
 org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.source=1.5
diff --git a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/META-INF/MANIFEST.MF b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/META-INF/MANIFEST.MF
index 41321a5..17c49d6 100644
--- a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/META-INF/MANIFEST.MF
+++ b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/META-INF/MANIFEST.MF
@@ -16,7 +16,12 @@
  org.eclipse.jdt.core;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.emf.ecore;bundle-version="[2.2.0,2.4.0)",
  org.eclipse.core.commands;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.ui;bundle-version="[3.2.0,4.0.0)"
+ org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.jst.jsf.facesconfig,
+ org.eclipse.wst.common.modulecore,
+ org.eclipse.wst.sse.core,
+ org.eclipse.jface.text,
+ org.eclipse.ui.editors
 Eclipse-LazyStart: true
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Export-Package: org.eclipse.jst.jsf.designtime.tests;x-internal:=true
diff --git a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/AllTests.java b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/AllTests.java
index 0e6b755..bac75b7 100644
--- a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/AllTests.java
+++ b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/AllTests.java
@@ -33,6 +33,10 @@
         suite.addTestSuite(TestResourceBundleMapSource.class);
         suite.addTestSuite(TestDefaultPropertyResolver.class);
         suite.addTestSuite(TestAbstractDataModelVariableFactory.class);
+        suite.addTestSuite(TestDefaultDTMethodResolver.class);
+        suite.addTestSuite(TestDefaultDTVariableResolver.class);
+        suite.addTestSuite(TestDTJSPExternalContext.class);
+        suite.addTestSuite(TestJSPDefaultSymbolFactory.class);
         
         //$JUnit-END$
         return suite;
diff --git a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestDTJSPExternalContext.java b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestDTJSPExternalContext.java
new file mode 100644
index 0000000..ff3e256
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestDTJSPExternalContext.java
@@ -0,0 +1,197 @@
+package org.eclipse.jst.jsf.designtime.tests;
+
+import java.io.ByteArrayInputStream;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jst.jsf.context.symbol.IInstanceSymbol;
+import org.eclipse.jst.jsf.context.symbol.ISymbol;
+import org.eclipse.jst.jsf.context.symbol.SymbolFactory;
+import org.eclipse.jst.jsf.context.symbol.source.ISymbolConstants;
+import org.eclipse.jst.jsf.core.IJSFCoreConstants;
+import org.eclipse.jst.jsf.core.tests.util.JSFFacetedTestEnvironment;
+import org.eclipse.jst.jsf.designtime.DesignTimeApplicationManager;
+import org.eclipse.jst.jsf.designtime.context.DTJSPExternalContext;
+import org.eclipse.jst.jsf.designtime.context.IDTExternalContext;
+import org.eclipse.jst.jsf.test.util.JDTTestEnvironment;
+import org.eclipse.jst.jsf.test.util.JSFTestUtil;
+import org.eclipse.jst.jsf.test.util.TestFileResource;
+import org.eclipse.jst.jsf.test.util.WebProjectTestEnvironment;
+
+import junit.framework.TestCase;
+
+public class TestDTJSPExternalContext extends TestCase 
+{
+	private IFile _testJSP1;
+	private JSFFacetedTestEnvironment _jsfFactedTestEnvironment;
+
+	protected void setUp() throws Exception 
+	{
+        super.setUp();
+        JSFTestUtil.setValidationEnabled(false);
+        JSFTestUtil.setInternetProxyPreferences(true, "www-proxy.us.oracle.com","80");
+
+        final WebProjectTestEnvironment  projectTestEnvironment = 
+            new WebProjectTestEnvironment("TestDTJSPExternalContext"+getName());
+        projectTestEnvironment.createProject(false);
+
+        JDTTestEnvironment jdtTestEnvironment = 
+        	new JDTTestEnvironment(projectTestEnvironment);
+
+        final TestFileResource input = new TestFileResource();
+        input.load(DesignTimeTestsPlugin.getDefault().getBundle(), 
+        		"/testdata/bundle1.resources.data");
+        jdtTestEnvironment.addResourceFile("src"
+        		, new ByteArrayInputStream(input.toBytes())
+        		, "bundles", "bundle1.properties");
+        
+        IResource res = projectTestEnvironment.loadResourceInWebRoot(DesignTimeTestsPlugin.getDefault().getBundle()
+        		, "/testdata/testdata1.jsp.data", "testdata1.jsp");
+        _testJSP1 = (IFile) res;
+
+        _jsfFactedTestEnvironment = new JSFFacetedTestEnvironment(projectTestEnvironment);
+        _jsfFactedTestEnvironment.initialize(IJSFCoreConstants.FACET_VERSION_1_1);	
+    }
+
+	protected void tearDown() throws Exception 
+	{
+		super.tearDown();
+	}
+
+	public void testDefaultDoGetMapForScopeInt() 
+	{
+		final DesignTimeApplicationManager manager = 
+			DesignTimeApplicationManager.getInstance(_testJSP1.getProject());
+		
+		{
+			final IDTExternalContext externalContext = 
+				manager.getFacesContext(_testJSP1).getDTExternalContext(_testJSP1);
+	
+			Map<String, ISymbol> requestMap = externalContext.getRequestMap();
+			Collection<ISymbol> symbols = requestMap.values();
+			// there is a bundle defined in the test JSP
+			// also a data table row variable
+			assertEquals(2, symbols.size());
+			assertContainsVariable(symbols,"bundle");
+			assertContainsVariable(symbols,"row");
+		}
+		
+		{
+			final TestableDTJSPExternalContext externalContext =
+				new TestableDTJSPExternalContext(_testJSP1);
+		
+			Map<String, ISymbol> requestMap = externalContext.getRequestMap();
+			Collection<ISymbol> symbols = requestMap.values();
+			assertEquals(1, symbols.size());
+			assertContainsVariable(symbols,"requestSymbol");
+
+			Map<String, ISymbol> sessionMap = externalContext.getSessionMap();
+			symbols = sessionMap.values();
+			assertEquals(1, symbols.size());
+			assertContainsVariable(symbols,"sessionSymbol");
+
+			Map<String, ISymbol> applicationMap = externalContext.getApplicationMap();
+			symbols = applicationMap.values();
+			assertEquals(1, symbols.size());
+			assertContainsVariable(symbols,"applicationSymbol");
+
+			Map<String, ISymbol> noneMap = externalContext.getNoneMap();
+			symbols = noneMap.values();
+			assertEquals(1, symbols.size());
+			assertContainsVariable(symbols,"noneSymbol");
+			
+			externalContext.trace(System.out);
+		}
+	}
+
+
+	private void assertContainsVariable(Collection<ISymbol> variables, String name)
+	{
+		for (ISymbol variable : variables)
+		{
+			if (name.equals(variable.getName()))
+			{
+				assertTrue(variable instanceof IInstanceSymbol);
+				return;
+			}
+		}
+		
+		fail("Expected variable not found: "+name);
+	}
+	
+	private class TestableDTJSPExternalContext extends DTJSPExternalContext
+	{
+		protected TestableDTJSPExternalContext(IAdaptable jspFile) 
+		{
+			super(jspFile);
+		}
+
+		@Override
+		protected Map<String, ISymbol> doGetMapForScope(int scopeMask) 
+		{
+			switch(scopeMask)
+			{
+				case ISymbolConstants.SYMBOL_SCOPE_REQUEST:
+					return initRequestMap();
+					
+				case ISymbolConstants.SYMBOL_SCOPE_SESSION:
+					return initSessionMap();
+					
+				case ISymbolConstants.SYMBOL_SCOPE_APPLICATION:
+					return initApplicationMap();
+					
+				case ISymbolConstants.SYMBOL_SCOPE_NONE:
+					return initNoneMap();
+			}
+			
+			throw new IllegalArgumentException();
+		}
+		
+		private Map<String, ISymbol> initRequestMap()
+		{
+			final Map<String, ISymbol> map = new HashMap<String, ISymbol>();
+			ISymbol  symbol = SymbolFactory.eINSTANCE.createIComponentSymbol();
+			symbol.setName("requestSymbol");
+			map.put("requestSymbol", symbol);
+			
+			return map;
+		}
+		
+		private Map<String, ISymbol> initSessionMap()
+		{
+			final Map<String, ISymbol> map = new HashMap<String, ISymbol>();
+
+			ISymbol  symbol = SymbolFactory.eINSTANCE.createIComponentSymbol();
+			symbol.setName("sessionSymbol");
+			map.put("sessionSymbol", symbol);
+			
+			return map;
+		}
+		
+		private Map<String, ISymbol> initApplicationMap()
+		{
+			final Map<String, ISymbol> map = new HashMap<String, ISymbol>();
+
+			ISymbol  symbol = SymbolFactory.eINSTANCE.createIComponentSymbol();
+			symbol.setName("applicationSymbol");
+			map.put("applicationSymbol", symbol);
+			
+			return map;
+		}
+
+		private Map<String, ISymbol> initNoneMap()
+		{
+			final Map<String, ISymbol> map = new HashMap<String, ISymbol>();
+
+			ISymbol  symbol = SymbolFactory.eINSTANCE.createIComponentSymbol();
+			symbol.setName("noneSymbol");
+			map.put("noneSymbol", symbol);
+			
+			return map;
+		}
+	}
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestDefaultDTMethodResolver.java b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestDefaultDTMethodResolver.java
new file mode 100644
index 0000000..56a29de
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestDefaultDTMethodResolver.java
@@ -0,0 +1,123 @@
+package org.eclipse.jst.jsf.designtime.tests;
+
+import junit.framework.TestCase;
+
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jst.jsf.context.symbol.IBeanInstanceSymbol;
+import org.eclipse.jst.jsf.context.symbol.IJavaTypeDescriptor2;
+import org.eclipse.jst.jsf.context.symbol.IMethodSymbol;
+import org.eclipse.jst.jsf.context.symbol.ISymbol;
+import org.eclipse.jst.jsf.context.symbol.SymbolFactory;
+import org.eclipse.jst.jsf.core.IJSFCoreConstants;
+import org.eclipse.jst.jsf.core.tests.util.JSFFacetedTestEnvironment;
+import org.eclipse.jst.jsf.designtime.el.DefaultDTMethodResolver;
+import org.eclipse.jst.jsf.test.util.JDTTestEnvironment;
+import org.eclipse.jst.jsf.test.util.JSFTestUtil;
+import org.eclipse.jst.jsf.test.util.WebProjectTestEnvironment;
+
+public class TestDefaultDTMethodResolver extends TestCase 
+{
+    private JDTTestEnvironment              _jdtTestEnvironment;
+    private JSFFacetedTestEnvironment       _jsfFactedTestEnvironment;
+
+    private IType                           _methodBeanType;
+    
+    private final static String     SRC_FOLDER_NAME = "src";
+    private final static String     PACKAGE_NAME = "com.test";
+    private final static String     TESTBEAN1_NAME = "MethodBean";
+    
+    @Override
+	protected void setUp() throws Exception
+	{
+        super.setUp();
+        JSFTestUtil.setValidationEnabled(false);
+        JSFTestUtil.setInternetProxyPreferences(true, "www-proxy.us.oracle.com","80");
+
+        final WebProjectTestEnvironment  projectTestEnvironment = 
+            new WebProjectTestEnvironment("TestDefaultMethodResolver"+getName());
+        projectTestEnvironment.createProject(false);
+
+        _jsfFactedTestEnvironment = new JSFFacetedTestEnvironment(projectTestEnvironment);
+        _jsfFactedTestEnvironment.initialize(IJSFCoreConstants.FACET_VERSION_1_1);
+        
+        _jdtTestEnvironment = new JDTTestEnvironment(projectTestEnvironment);
+
+        JSFTestUtil.loadSourceClass(
+                DesignTimeTestsPlugin.getDefault().getBundle(), 
+                    "/testdata/MethodBean.java.data", TESTBEAN1_NAME, SRC_FOLDER_NAME, PACKAGE_NAME, _jdtTestEnvironment);
+        _methodBeanType = 
+            _jdtTestEnvironment.getJavaProject().findType(PACKAGE_NAME+"."+TESTBEAN1_NAME);
+        assertNotNull(_methodBeanType);
+	}
+
+	@Override
+	protected void tearDown() throws Exception 
+	{
+		super.tearDown();
+		
+        _jdtTestEnvironment.getJavaProject().getProject().delete(true, null);
+	}
+
+	public void testGetMethod() 
+	{
+        final IBeanInstanceSymbol symbol = SymbolFactory.eINSTANCE.createIBeanInstanceSymbol();
+        symbol.setName("myBean2");
+        final IJavaTypeDescriptor2 typeDesc = SymbolFactory.eINSTANCE.createIJavaTypeDescriptor2();
+        typeDesc.setType(_methodBeanType);
+        symbol.setTypeDescriptor(typeDesc);
+
+        DefaultDTMethodResolver  methodResolver = new DefaultDTMethodResolver();
+        
+        IMethodSymbol methodSymbol = methodResolver.getMethod(symbol, "actionMethod");
+        assertNotNull(methodSymbol);
+        assertEquals("actionMethod", methodSymbol.getName());
+        assertEquals("()Ljava.lang.String;", methodSymbol.getSignature());
+        
+        methodSymbol = methodResolver.getMethod(symbol, "actionMethodWithParam");
+        assertNotNull(methodSymbol);
+        assertEquals("actionMethodWithParam", methodSymbol.getName());
+        assertEquals("(Ljava.lang.String;)Ljava.lang.String;", methodSymbol.getSignature());
+        
+        // method not found
+        methodSymbol = methodResolver.getMethod(symbol, "notAMethod");
+        assertNull(methodSymbol);
+	}
+
+	public void testGetMethods() 
+	{
+        final IBeanInstanceSymbol symbol = SymbolFactory.eINSTANCE.createIBeanInstanceSymbol();
+        symbol.setName("myBean2");
+        final IJavaTypeDescriptor2 typeDesc = SymbolFactory.eINSTANCE.createIJavaTypeDescriptor2();
+        typeDesc.setType(_methodBeanType);
+        symbol.setTypeDescriptor(typeDesc);
+
+        DefaultDTMethodResolver  methodResolver = new DefaultDTMethodResolver();
+
+        ISymbol[] symbols = methodResolver.getMethods(symbol);
+        assertNotNull(symbols);
+        assertEquals(11, symbols.length);
+        assertContains(symbols, "actionMethod", "()Ljava.lang.String;");
+        assertContains(symbols, "actionMethodWithParam", "(Ljava.lang.String;)Ljava.lang.String;");
+	}
+
+	private void assertContains(ISymbol[] methods, String name, String signature)
+	{
+		IMethodSymbol methodSymbol = null;
+		
+		for (int i = 0; i < methods.length; i++)
+		{
+			ISymbol symbol = methods[i];
+			
+			if (name.equals(symbol.getName()))
+			{
+				assertTrue(symbol instanceof IMethodSymbol);
+				if (((IMethodSymbol)symbol).getSignature().equals(signature))
+				{
+					methodSymbol = (IMethodSymbol) symbol;
+				}
+			}
+		}
+		
+		assertNotNull(methodSymbol);
+	}
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestDefaultDTVariableResolver.java b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestDefaultDTVariableResolver.java
new file mode 100644
index 0000000..7bdf4f6
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestDefaultDTVariableResolver.java
@@ -0,0 +1,214 @@
+package org.eclipse.jst.jsf.designtime.tests;
+
+import java.io.ByteArrayInputStream;
+
+import junit.framework.TestCase;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jst.jsf.context.symbol.IBeanInstanceSymbol;
+import org.eclipse.jst.jsf.context.symbol.IComponentSymbol;
+import org.eclipse.jst.jsf.context.symbol.IInstanceSymbol;
+import org.eclipse.jst.jsf.context.symbol.IJavaTypeDescriptor2;
+import org.eclipse.jst.jsf.context.symbol.IMapTypeDescriptor;
+import org.eclipse.jst.jsf.context.symbol.ISymbol;
+import org.eclipse.jst.jsf.context.symbol.ITypeDescriptor;
+import org.eclipse.jst.jsf.core.IJSFCoreConstants;
+import org.eclipse.jst.jsf.core.tests.util.JSFFacetedTestEnvironment;
+import org.eclipse.jst.jsf.designtime.DesignTimeApplicationManager;
+import org.eclipse.jst.jsf.designtime.el.DefaultDTVariableResolver;
+import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigFactory;
+import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigType;
+import org.eclipse.jst.jsf.facesconfig.emf.ManagedBeanClassType;
+import org.eclipse.jst.jsf.facesconfig.emf.ManagedBeanNameType;
+import org.eclipse.jst.jsf.facesconfig.emf.ManagedBeanScopeType;
+import org.eclipse.jst.jsf.facesconfig.emf.ManagedBeanType;
+import org.eclipse.jst.jsf.facesconfig.util.FacesConfigArtifactEdit;
+import org.eclipse.jst.jsf.test.util.JDTTestEnvironment;
+import org.eclipse.jst.jsf.test.util.JSFTestUtil;
+import org.eclipse.jst.jsf.test.util.TestFileResource;
+import org.eclipse.jst.jsf.test.util.WebProjectTestEnvironment;
+
+public class TestDefaultDTVariableResolver extends TestCase 
+{
+    private IType                           _testBean1Type;
+	private JSFFacetedTestEnvironment 	_jsfFactedTestEnvironment;
+	private JDTTestEnvironment 			_jdtTestEnvironment;
+	private IFile						_testJSP1;
+
+    private final static String     SRC_FOLDER_NAME = "src";
+    private final static String     PACKAGE_NAME = "com.test";
+    private final static String     TESTBEAN1_NAME = "TestBean1";
+
+	
+	protected void setUp() throws Exception 
+	{
+        super.setUp();
+        JSFTestUtil.setValidationEnabled(false);
+        JSFTestUtil.setInternetProxyPreferences(true, "www-proxy.us.oracle.com","80");
+
+        final WebProjectTestEnvironment  projectTestEnvironment = 
+            new WebProjectTestEnvironment("TestDefaultPropertyResolver"+getName());
+        projectTestEnvironment.createProject(false);
+
+        IResource res = projectTestEnvironment.loadResourceInWebRoot(DesignTimeTestsPlugin.getDefault().getBundle()
+        		, "/testdata/testdata1.jsp.data", "testdata1.jsp");
+        _testJSP1 = (IFile) res;
+        
+        _jsfFactedTestEnvironment = new JSFFacetedTestEnvironment(projectTestEnvironment);
+        _jsfFactedTestEnvironment.initialize(IJSFCoreConstants.FACET_VERSION_1_1);
+
+        final IProject project = projectTestEnvironment.getTestProject();
+        
+        FacesConfigArtifactEdit edit = null;
+        
+        try
+        {
+        	edit = FacesConfigArtifactEdit.getFacesConfigArtifactEditForWrite(project, null);
+        
+        	FacesConfigType model = edit.getFacesConfig();
+        	ManagedBeanClassType beanClass = FacesConfigFactory.eINSTANCE.createManagedBeanClassType();
+        	beanClass.setTextContent("com.test.TestBean1");
+
+        	ManagedBeanNameType beanName = FacesConfigFactory.eINSTANCE.createManagedBeanNameType();
+        	beanName.setTextContent("testBean1");
+        	
+        	ManagedBeanScopeType beanScope = FacesConfigFactory.eINSTANCE.createManagedBeanScopeType();
+        	beanScope.setTextContent("session");
+        	
+        	ManagedBeanType bean = FacesConfigFactory.eINSTANCE.createManagedBeanType();
+        	bean.setManagedBeanClass(beanClass);
+        	bean.setManagedBeanName(beanName);
+        	bean.setManagedBeanScope(beanScope);
+        	
+        	model.getManagedBean().add(bean);
+        	
+        	edit.save(null);
+        }
+        finally
+        {
+        	if (edit != null)
+        	{
+        		edit.dispose();
+        	}
+        }
+        
+        _jdtTestEnvironment = new JDTTestEnvironment(projectTestEnvironment);
+        
+        final TestFileResource input = new TestFileResource();
+        input.load(DesignTimeTestsPlugin.getDefault().getBundle(), 
+        		"/testdata/bundle1.resources.data");
+        _jdtTestEnvironment.addResourceFile("src"
+        		, new ByteArrayInputStream(input.toBytes())
+        		, "bundles", "bundle1.properties");
+
+        JSFTestUtil.loadSourceClass(
+                DesignTimeTestsPlugin.getDefault().getBundle(), 
+                    "/testdata/TestBean1.java.data", TESTBEAN1_NAME, SRC_FOLDER_NAME, PACKAGE_NAME, _jdtTestEnvironment);
+        _testBean1Type = _jdtTestEnvironment.getJavaProject().findType(PACKAGE_NAME+"."+TESTBEAN1_NAME);
+        assertNotNull(_testBean1Type);
+	}
+
+	protected void tearDown() throws Exception 
+	{
+		super.tearDown();
+	}
+
+	public void testResolveVariable() 
+	{
+		checkBuiltinVariables();
+		checkSymbolMaps();
+		checkManagedBeanVariable();
+	}
+
+	private void checkBuiltinVariables()
+	{
+        final DesignTimeApplicationManager manager =
+        	DesignTimeApplicationManager.getInstance
+        		(_jdtTestEnvironment.getProjectEnvironment().getTestProject());
+
+		DefaultDTVariableResolver  variableResolver = new DefaultDTVariableResolver();
+		ISymbol symbol = variableResolver.resolveVariable
+			(manager.getFacesContext(_testJSP1), "applicationScope", _testJSP1);
+		assertNotNull(symbol);
+	}
+	
+	private void checkSymbolMaps()
+	{
+        final DesignTimeApplicationManager manager =
+        	DesignTimeApplicationManager.getInstance
+        		(_jdtTestEnvironment.getProjectEnvironment().getTestProject());
+
+		DefaultDTVariableResolver  variableResolver = new DefaultDTVariableResolver();
+		ISymbol symbol = variableResolver.resolveVariable
+			(manager.getFacesContext(_testJSP1), "bundle", _testJSP1);
+		assertNotNull(symbol);
+		assertTrue(symbol instanceof IComponentSymbol);
+		
+		IComponentSymbol compSymbol = (IComponentSymbol) symbol;
+		assertEquals("bundle", compSymbol.getName());
+		ITypeDescriptor typeDesc = compSymbol.getTypeDescriptor();
+		assertTrue(typeDesc instanceof IMapTypeDescriptor);
+	}
+	
+	private void checkManagedBeanVariable()
+	{
+        final DesignTimeApplicationManager manager =
+        	DesignTimeApplicationManager.getInstance
+        		(_jdtTestEnvironment.getProjectEnvironment().getTestProject());
+
+		DefaultDTVariableResolver  variableResolver = new DefaultDTVariableResolver();
+		ISymbol symbol = variableResolver.resolveVariable
+			(manager.getFacesContext(_testJSP1), "testBean1", _testJSP1);
+		assertNotNull(symbol);
+		assertTrue(symbol instanceof IBeanInstanceSymbol);
+		
+		IBeanInstanceSymbol compSymbol = (IBeanInstanceSymbol) symbol;
+		assertEquals("testBean1", compSymbol.getName());
+		ITypeDescriptor typeDesc = compSymbol.getTypeDescriptor();
+		assertTrue(typeDesc instanceof IJavaTypeDescriptor2);
+		assertEquals("Lcom.test.TestBean1;", typeDesc.getTypeSignature());
+	}
+	
+	public void testGetAllVariables() 
+	{
+        final DesignTimeApplicationManager manager =
+        	DesignTimeApplicationManager.getInstance
+        		(_jdtTestEnvironment.getProjectEnvironment().getTestProject());
+
+		DefaultDTVariableResolver  variableResolver = new DefaultDTVariableResolver();
+		
+		ISymbol[] variables = variableResolver.getAllVariables
+			(manager.getFacesContext(_testJSP1), _testJSP1);
+		
+		assertContainsVariable(variables, "applicationScope");
+		assertContainsVariable(variables, "sessionScope");
+		assertContainsVariable(variables, "requestScope");
+		assertContainsVariable(variables, "cookie");
+		assertContainsVariable(variables, "facesContext");
+		assertContainsVariable(variables, "header");
+		assertContainsVariable(variables, "headerValues");
+		assertContainsVariable(variables, "initParam");
+		assertContainsVariable(variables, "param");
+		assertContainsVariable(variables, "paramValues");
+		assertContainsVariable(variables, "view");
+		assertContainsVariable(variables, "testBean1");
+		assertContainsVariable(variables, "bundle");
+	}
+
+	private void assertContainsVariable(ISymbol[] variables, String name)
+	{
+		for (ISymbol variable : variables)
+		{
+			if (name.equals(variable.getName()))
+			{
+				assertTrue(variable instanceof IInstanceSymbol);
+				return;
+			}
+		}
+		
+		fail("Expected variable not found: "+name);
+	}
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestDefaultPropertyResolver.java b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestDefaultPropertyResolver.java
index beaec75..4a6745a 100644
--- a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestDefaultPropertyResolver.java
+++ b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestDefaultPropertyResolver.java
@@ -11,6 +11,7 @@
  ********************************************************************************/
 package org.eclipse.jst.jsf.designtime.tests;
 
+import java.io.ByteArrayInputStream;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -20,7 +21,9 @@
 import org.eclipse.jdt.core.Signature;
 import org.eclipse.jst.jsf.common.internal.types.TypeConstants;
 import org.eclipse.jst.jsf.common.util.JDTBeanIntrospector;
+import org.eclipse.jst.jsf.common.util.JDTBeanProperty;
 import org.eclipse.jst.jsf.context.symbol.IBeanInstanceSymbol;
+import org.eclipse.jst.jsf.context.symbol.IBoundedMapTypeDescriptor;
 import org.eclipse.jst.jsf.context.symbol.IComponentSymbol;
 import org.eclipse.jst.jsf.context.symbol.IJavaTypeDescriptor2;
 import org.eclipse.jst.jsf.context.symbol.IMapTypeDescriptor;
@@ -31,8 +34,10 @@
 import org.eclipse.jst.jsf.core.IJSFCoreConstants;
 import org.eclipse.jst.jsf.core.tests.util.JSFFacetedTestEnvironment;
 import org.eclipse.jst.jsf.designtime.el.DefaultDTPropertyResolver;
+import org.eclipse.jst.jsf.designtime.internal.symbols.ResourceBundleMapSourceFactory;
 import org.eclipse.jst.jsf.test.util.JDTTestEnvironment;
 import org.eclipse.jst.jsf.test.util.JSFTestUtil;
+import org.eclipse.jst.jsf.test.util.TestFileResource;
 import org.eclipse.jst.jsf.test.util.WebProjectTestEnvironment;
 
 /**
@@ -75,16 +80,19 @@
         final WebProjectTestEnvironment  projectTestEnvironment = 
             new WebProjectTestEnvironment("TestDefaultPropertyResolver"+getName());
         projectTestEnvironment.createProject(false);
-//        _facesConfigFile = (IFile) projectTestEnvironment.
-//            loadResourceInWebRoot(DesignTimeTestsPlugin.getDefault().getBundle(),
-//                                  "/testdata/faces-config.xml.data", 
-//                                  "/WEB-INF/faces-config.xml");
 
         _jsfFactedTestEnvironment = new JSFFacetedTestEnvironment(projectTestEnvironment);
         _jsfFactedTestEnvironment.initialize(IJSFCoreConstants.FACET_VERSION_1_1);
         
         _jdtTestEnvironment = new JDTTestEnvironment(projectTestEnvironment);
 
+        final TestFileResource input = new TestFileResource();
+        input.load(DesignTimeTestsPlugin.getDefault().getBundle(), 
+        		"/testdata/bundle1.resources.data");
+        _jdtTestEnvironment.addResourceFile(SRC_FOLDER_NAME
+        		, new ByteArrayInputStream(input.toBytes())
+        		, "bundles", "bundle1.properties");
+        
         JSFTestUtil.loadSourceClass(
                 DesignTimeTestsPlugin.getDefault().getBundle(), 
                     "/testdata/TestBean1.java.data", TESTBEAN1_NAME, SRC_FOLDER_NAME, PACKAGE_NAME, _jdtTestEnvironment);
@@ -158,7 +166,7 @@
     public void testSanity()
     {
         JDTBeanIntrospector  beanIntrospector = new JDTBeanIntrospector(_testBean1Type);
-        Map props = beanIntrospector.getProperties();
+        Map<String, JDTBeanProperty> props = beanIntrospector.getProperties();
         assertEquals(NUM_PROPERTIES_TEST_BEAN_1, props.size());
         assertTrue(props.containsKey("stringProp1"));
         assertTrue(props.containsKey("booleanIsProp1"));
@@ -211,10 +219,10 @@
         DefaultDTPropertyResolver propResolver = new DefaultDTPropertyResolver();
         ISymbol[]  properties = propResolver.getAllProperties(symbol);
         assertEquals(NUM_PROPERTIES_TEST_BEAN_1, properties.length);
-        Map  checkProps = new HashMap();
-        for (int i = 0; i < properties.length; i++)
+        Map<String, ISymbol>  checkProps = new HashMap<String, ISymbol>();
+        for (ISymbol propSymbol : properties)
         {
-            checkProps.put(properties[i].getName(), properties[i]);
+            checkProps.put(propSymbol.getName(), propSymbol);
         }
         
         assertTrue(checkProps.containsKey("stringProp1"));
@@ -251,7 +259,7 @@
         IJavaTypeDescriptor2 typeDesc = SymbolFactory.eINSTANCE.createIJavaTypeDescriptor2();
         typeDesc.setType(_testMapBean1Type);
         symbol.setTypeDescriptor(typeDesc);
-        
+
         DefaultDTPropertyResolver propResolver = new DefaultDTPropertyResolver();
         ISymbol[]  properties = propResolver.getAllProperties(symbol);
         // there no design-time identifiable properties
@@ -273,7 +281,7 @@
             assertEquals(TypeConstants.TYPE_JAVAOBJECT, ((IPropertySymbol)someProperty1).getTypeDescriptor().getTypeSignature());
         }
     }
-    
+
     /**
      * Test a component with map source
      */
@@ -282,7 +290,7 @@
         final IComponentSymbol symbol = SymbolFactory.eINSTANCE.createIComponentSymbol();
         symbol.setName("myComponentSymbol");
         final IMapTypeDescriptor typeDesc = SymbolFactory.eINSTANCE.createIMapTypeDescriptor();
-        final Map mapSource = new HashMap();
+        final Map<String, String> mapSource = new HashMap<String, String>();
         mapSource.put("prop1", "propValue1");
         mapSource.put("prop2", "propValue2");
         mapSource.put("dotted.property", "dottedPropertyValue");
@@ -352,7 +360,7 @@
             assertEquals(2, properties.length);  // should have defined property plus class
             
             // check props
-            final Map  gotProps  = new HashMap();
+            final Map<String, IPropertySymbol>  gotProps  = new HashMap<String, IPropertySymbol>();
             
             for (int i = 0; i < properties.length; i++)
             {
@@ -584,6 +592,9 @@
         
         IPropertySymbol unboundedProp = (IPropertySymbol) propResolver.getProperty(listProp, 0);
         assertEquals(TypeConstants.TYPE_JAVAOBJECT, unboundedProp.getTypeDescriptor().getTypeSignature());
+        
+        // list base symbols do not have non-numeric keys
+        assertNull(propResolver.getProperty(listProp, "anyKey"));
     }
     
     public void testGenericListProperty()
@@ -615,6 +626,80 @@
         assertEquals(TypeConstants.TYPE_STRING, unboundedProp.getTypeDescriptor().getTypeSignature());
     }
     
+    public void testBoundedTypeDescriptor()
+    {
+    	final IComponentSymbol symbol = 
+    		SymbolFactory.eINSTANCE.createIComponentSymbol();
+        symbol.setName("componentSymbol");
+        final IBoundedMapTypeDescriptor typeDesc = 
+        	SymbolFactory.eINSTANCE.createIBoundedMapTypeDescriptor();
+        typeDesc.setMapSource(new HashMap<String, String>());
+        symbol.setTypeDescriptor(typeDesc);
+        
+        DefaultDTPropertyResolver propResolver = new DefaultDTPropertyResolver();
+        ISymbol propSymbol = propResolver.getProperty(symbol, "anyProp");
+        
+        assertNotNull(propSymbol);
+        assertTrue(propSymbol instanceof IPropertySymbol);
+        assertEquals(TypeConstants.TYPE_JAVAOBJECT, 
+        	((IPropertySymbol)propSymbol).getTypeDescriptor().getTypeSignature());
+    }
+
+    public void testDottedPropertyNames() throws Exception
+    {
+    	checkDottedBundleNames();
+    	// TODO: should add coverage for dotted, non-bundles...
+    }
+    
+    private void checkDottedBundleNames() throws Exception
+    {
+        Map map = 
+        	ResourceBundleMapSourceFactory.getResourceBundleMapSource
+        		(_jdtTestEnvironment.getProjectEnvironment().getTestProject()
+        				, "bundles.bundle1");
+        assertNotNull(map);
+        assertEquals(3, map.size());
+
+        final IMapTypeDescriptor typeDesc = 
+            SymbolFactory.eINSTANCE.createIMapTypeDescriptor();
+        typeDesc.setMapSource(map);
+        final IComponentSymbol symbol = 
+            SymbolFactory.eINSTANCE.createIComponentSymbol();
+        symbol.setName("dottedMapSource");
+        symbol.setTypeDescriptor(typeDesc);
+
+        DefaultDTPropertyResolver propResolver = new DefaultDTPropertyResolver();
+        {
+	        ISymbol oneDot = propResolver.getProperty(symbol, "one");
+	        assertNotNull(oneDot);
+	        assertTrue(oneDot instanceof IPropertySymbol);
+	        assertTrue(((IPropertySymbol)oneDot).isIntermediate());
+
+	        oneDot = propResolver.getProperty(symbol, "one.dot");
+	        assertNotNull(oneDot);
+	        assertTrue(oneDot instanceof IPropertySymbol);
+	        assertFalse(((IPropertySymbol)oneDot).isIntermediate());
+        }
+
+        {
+        	ISymbol twoDots = propResolver.getProperty(symbol, "two");
+            assertNotNull(twoDots);
+            assertTrue(twoDots instanceof IPropertySymbol);
+	        assertTrue(((IPropertySymbol)twoDots).isIntermediate());
+
+        	twoDots = propResolver.getProperty(symbol, "two.dot");
+            assertNotNull(twoDots);
+            assertTrue(twoDots instanceof IPropertySymbol);
+	        assertTrue(((IPropertySymbol)twoDots).isIntermediate());
+
+        	twoDots = propResolver.getProperty(symbol, "two.dot.property");
+            assertNotNull(twoDots);
+            assertTrue(twoDots instanceof IPropertySymbol);
+	        assertFalse(((IPropertySymbol)twoDots).isIntermediate());
+
+        }
+    }
+    
     private ISymbol findSymbol(final String name, ISymbol[] symbols)
     {
         for (ISymbol symbol : symbols)
diff --git a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestDesignTimeApplicationManager.java b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestDesignTimeApplicationManager.java
new file mode 100644
index 0000000..87866f7
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestDesignTimeApplicationManager.java
@@ -0,0 +1,117 @@
+package org.eclipse.jst.jsf.designtime.tests;
+
+import java.io.ByteArrayInputStream;
+
+import junit.framework.TestCase;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.jst.jsf.core.IJSFCoreConstants;
+import org.eclipse.jst.jsf.core.tests.util.JSFFacetedTestEnvironment;
+import org.eclipse.jst.jsf.designtime.DesignTimeApplicationManager;
+import org.eclipse.jst.jsf.designtime.context.DTFacesContext;
+import org.eclipse.jst.jsf.test.util.JDTTestEnvironment;
+import org.eclipse.jst.jsf.test.util.JSFTestUtil;
+import org.eclipse.jst.jsf.test.util.TestFileResource;
+import org.eclipse.jst.jsf.test.util.WebProjectTestEnvironment;
+
+public class TestDesignTimeApplicationManager extends TestCase 
+{
+	private IFile 						_testJSP;
+	private JSFFacetedTestEnvironment 	_jsfFactedTestEnvironment;
+
+
+	protected void setUp() throws Exception 
+	{
+        super.setUp();
+        JSFTestUtil.setValidationEnabled(false);
+        JSFTestUtil.setInternetProxyPreferences(true, "www-proxy.us.oracle.com","80");
+
+        final WebProjectTestEnvironment  projectTestEnvironment = 
+            new WebProjectTestEnvironment("TestDesignTimeApplicationManager"+getName());
+        projectTestEnvironment.createProject(false);
+
+        final JDTTestEnvironment jdtTestEnvironment = 
+        	new JDTTestEnvironment(projectTestEnvironment);
+
+        final TestFileResource input = new TestFileResource();
+        input.load(DesignTimeTestsPlugin.getDefault().getBundle(), 
+        		"/testdata/bundle1.resources.data");
+        jdtTestEnvironment.addResourceFile("src"
+        		, new ByteArrayInputStream(input.toBytes())
+        		, "bundles", "bundle1.properties");
+        
+        final IResource res = 
+        	projectTestEnvironment.loadResourceInWebRoot(DesignTimeTestsPlugin.getDefault().getBundle()
+        		, "/testdata/testdata1.jsp.data", "testdata1.jsp");
+        _testJSP = (IFile) res;
+
+        _jsfFactedTestEnvironment = new JSFFacetedTestEnvironment(projectTestEnvironment);
+        _jsfFactedTestEnvironment.initialize(IJSFCoreConstants.FACET_VERSION_1_1);
+    }
+
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+
+	public void testGetInstance() {
+		//fail("Not yet implemented");
+	}
+
+	public void testGetFacesContext() 
+	{
+		final DesignTimeApplicationManager  manager = 
+			DesignTimeApplicationManager.getInstance(_testJSP.getProject());
+		
+		final DTFacesContext facesContext = manager.getFacesContext(_testJSP);
+		assertNotNull(facesContext);
+	}
+
+//	public void testSetExternalContextProvider() 
+//	{
+//		final DesignTimeApplicationManager  manager = 
+//			DesignTimeApplicationManager.getInstance(_testJSP.getProject());
+//
+//		manager.setExternalContextProvider(resolverPluginId);
+//	}
+//
+//	public void testGetExternalContextProvider() {
+//		//fail("Not yet implemented");
+//	}
+//
+//	public void testGetVariableResolver() {
+//		//fail("Not yet implemented");
+//	}
+//
+//	public void testSetVariableResolverProvider() {
+//		//fail("Not yet implemented");
+//	}
+//
+//	public void testGetVariableResolverProvider() {
+//		//fail("Not yet implemented");
+//	}
+//
+//	public void testGetPropertyResolver() {
+//		//fail("Not yet implemented");
+//	}
+//
+//	public void testSetPropertyResolverProvider() {
+//		//fail("Not yet implemented");
+//	}
+//
+//	public void testGetPropertyResolverProvider() {
+//		//fail("Not yet implemented");
+//	}
+//
+//	public void testGetMethodResolver() {
+//		//fail("Not yet implemented");
+//	}
+//
+//	public void testSetMethodResolverProvider() {
+//		//fail("Not yet implemented");
+//	}
+//
+//	public void testGetMethodResolverProvider() {
+//		//fail("Not yet implemented");
+//	}
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestJSPDefaultSymbolFactory.java b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestJSPDefaultSymbolFactory.java
new file mode 100644
index 0000000..ebe68cc
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestJSPDefaultSymbolFactory.java
@@ -0,0 +1,120 @@
+package org.eclipse.jst.jsf.designtime.tests;
+
+import java.io.ByteArrayInputStream;
+import java.util.ArrayList;
+
+import junit.framework.TestCase;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory;
+import org.eclipse.jst.jsf.context.symbol.IInstanceSymbol;
+import org.eclipse.jst.jsf.context.symbol.ISymbol;
+import org.eclipse.jst.jsf.context.symbol.source.ISymbolConstants;
+import org.eclipse.jst.jsf.core.IJSFCoreConstants;
+import org.eclipse.jst.jsf.core.tests.util.JSFFacetedTestEnvironment;
+import org.eclipse.jst.jsf.designtime.internal.jsp.JSPDefaultSymbolFactory;
+import org.eclipse.jst.jsf.test.util.JDTTestEnvironment;
+import org.eclipse.jst.jsf.test.util.JSFTestUtil;
+import org.eclipse.jst.jsf.test.util.TestFileResource;
+import org.eclipse.jst.jsf.test.util.WebProjectTestEnvironment;
+import org.eclipse.wst.sse.core.StructuredModelManager;
+import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
+
+public class TestJSPDefaultSymbolFactory extends TestCase 
+{
+	private IFile 						_testJSP;
+	private JSFFacetedTestEnvironment 	_jsfFactedTestEnvironment;
+	private IStructuredModel 			_structuredModel;
+	private IStructuredDocument 		_structuredDocument;
+
+	protected void setUp() throws Exception 
+	{
+        super.setUp();
+        JSFTestUtil.setValidationEnabled(false);
+        JSFTestUtil.setInternetProxyPreferences(true, "www-proxy.us.oracle.com","80");
+
+        final WebProjectTestEnvironment  projectTestEnvironment = 
+            new WebProjectTestEnvironment("TestJSPDefaultSymbolFactory"+getName());
+        projectTestEnvironment.createProject(false);
+
+        final JDTTestEnvironment jdtTestEnvironment = 
+        	new JDTTestEnvironment(projectTestEnvironment);
+
+        final TestFileResource input = new TestFileResource();
+        input.load(DesignTimeTestsPlugin.getDefault().getBundle(), 
+        		"/testdata/bundle1.resources.data");
+        jdtTestEnvironment.addResourceFile("src"
+        		, new ByteArrayInputStream(input.toBytes())
+        		, "bundles", "bundle1.properties");
+        
+        final IResource res = 
+        	projectTestEnvironment.loadResourceInWebRoot(DesignTimeTestsPlugin.getDefault().getBundle()
+        		, "/testdata/testdata1.jsp.data", "testdata1.jsp");
+        _testJSP = (IFile) res;
+
+        _jsfFactedTestEnvironment = new JSFFacetedTestEnvironment(projectTestEnvironment);
+        _jsfFactedTestEnvironment.initialize(IJSFCoreConstants.FACET_VERSION_1_1);
+        
+        _structuredModel = StructuredModelManager.getModelManager().getModelForRead(_testJSP);
+        _structuredDocument = _structuredModel.getStructuredDocument();
+
+    }
+
+	protected void tearDown() throws Exception 
+	{
+		super.tearDown();
+		_structuredModel.releaseFromRead();
+	}
+
+	public void testSupports()
+	{
+		JSPDefaultSymbolFactory factory = new JSPDefaultSymbolFactory();
+
+		// must be a structured document context
+		assertFalse(factory.supports(_testJSP));
+
+		final IStructuredDocumentContext context =
+			IStructuredDocumentContextFactory.INSTANCE
+				.getContext(_structuredDocument, 0);
+
+		// must work for a JSP document context
+		assertTrue(factory.supports(context));
+	}
+
+	public void testCreate()
+	{
+		final JSPDefaultSymbolFactory factory = new JSPDefaultSymbolFactory();
+
+		final IStructuredDocumentContext context =
+			IStructuredDocumentContextFactory.INSTANCE
+				.getContext(_structuredDocument, 0);
+
+		ISymbol var =
+			factory.create("notAVariable"
+				, ISymbolConstants.SYMBOL_SCOPE_REQUEST, context, new ArrayList());
+		assertNull(var);
+
+		var = factory.create("bundle"
+			, ISymbolConstants.SYMBOL_SCOPE_REQUEST
+			, IStructuredDocumentContextFactory.INSTANCE.getContext(_structuredDocument, 569)
+			, new ArrayList());
+		
+		// load bundle introduces a variable
+		assertNotNull(var);
+		assertTrue(var instanceof IInstanceSymbol);
+		assertEquals("bundle", var.getName());
+		
+		var = factory.create("row"
+				, ISymbolConstants.SYMBOL_SCOPE_REQUEST
+				, IStructuredDocumentContextFactory.INSTANCE.getContext(_structuredDocument, 1397)
+				, new ArrayList());
+		
+		// data table introduces a variable
+		assertNotNull(var);
+		assertTrue(var instanceof IInstanceSymbol);
+		assertEquals("row", var.getName());
+	}
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestStartupHandler.java b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestStartupHandler.java
new file mode 100644
index 0000000..cba6c99
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestStartupHandler.java
@@ -0,0 +1,83 @@
+package org.eclipse.jst.jsf.designtime.tests;
+
+import java.io.ByteArrayInputStream;
+
+import junit.framework.TestCase;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.jst.jsf.core.IJSFCoreConstants;
+import org.eclipse.jst.jsf.core.tests.util.JSFFacetedTestEnvironment;
+import org.eclipse.jst.jsf.designtime.internal.jsp.StartupHandler;
+import org.eclipse.jst.jsf.test.util.JDTTestEnvironment;
+import org.eclipse.jst.jsf.test.util.JSFTestUtil;
+import org.eclipse.jst.jsf.test.util.TestFileResource;
+import org.eclipse.jst.jsf.test.util.WebProjectTestEnvironment;
+import org.eclipse.ui.IEditorDescriptor;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorRegistry;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.ide.IDE;
+import org.eclipse.ui.ide.ResourceUtil;
+
+/**
+ * Some basic coverage of the editor open listener registered by the
+ * StartupHandler
+ * 
+ * @author cbateman
+ *
+ */
+public class TestStartupHandler extends TestCase 
+{
+	private IFile _testJSP1;
+	private JSFFacetedTestEnvironment _jsfFactedTestEnvironment;
+
+	protected void setUp() throws Exception 
+	{
+        super.setUp();
+        JSFTestUtil.setValidationEnabled(false);
+        JSFTestUtil.setInternetProxyPreferences(true, "www-proxy.us.oracle.com","80");
+
+        final WebProjectTestEnvironment  projectTestEnvironment = 
+            new WebProjectTestEnvironment("TestDTJSPExternalContext"+getName());
+        projectTestEnvironment.createProject(false);
+
+        JDTTestEnvironment jdtTestEnvironment = 
+        	new JDTTestEnvironment(projectTestEnvironment);
+
+        final TestFileResource input = new TestFileResource();
+        input.load(DesignTimeTestsPlugin.getDefault().getBundle(), 
+        		"/testdata/bundle1.resources.data");
+        jdtTestEnvironment.addResourceFile("src"
+        		, new ByteArrayInputStream(input.toBytes())
+        		, "bundles", "bundle1.properties");
+        
+        IResource res = projectTestEnvironment.loadResourceInWebRoot(DesignTimeTestsPlugin.getDefault().getBundle()
+        		, "/testdata/testdata1.jsp.data", "testdata1.jsp");
+        _testJSP1 = (IFile) res;
+
+        _jsfFactedTestEnvironment = new JSFFacetedTestEnvironment(projectTestEnvironment);
+        _jsfFactedTestEnvironment.initialize(IJSFCoreConstants.FACET_VERSION_1_1);	
+    }
+
+	protected void tearDown() throws Exception 
+	{
+		super.tearDown();
+	}
+
+	public void testLaunchEditor() throws Exception
+	{
+		final IWorkbenchPage  curPage = 
+			PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+		final IEditorPart editor =
+			IDE.openEditor
+				(curPage
+				, _testJSP1);
+		assertNotNull(editor);
+		final IEditorPart foundEditor = ResourceUtil.findEditor(curPage, _testJSP1);
+		assertEquals(editor, foundEditor);
+		
+		StartupHandler handler;
+	}
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/testdata/MethodBean.java.data b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/testdata/MethodBean.java.data
new file mode 100644
index 0000000..b657a03
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/testdata/MethodBean.java.data
@@ -0,0 +1,14 @@
+
+
+public class MethodBean
+{
+    public String actionMethod()
+    {
+        return "chicken";
+    }
+
+    public String actionMethodWithParam(String arg)
+    {
+        return arg;
+    }
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/testdata/testdata1.jsp.data b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/testdata/testdata1.jsp.data
new file mode 100644
index 0000000..b784cba
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/testdata/testdata1.jsp.data
@@ -0,0 +1,54 @@
+
+<%@page contentType="text/html"%>
+<%@page pageEncoding="UTF-8"%>
+<%--
+The taglib directive below imports the JSTL library. If you uncomment it,
+you must also add the JSTL library to the project. The Add Library... action
+on Libraries node in Projects view can be used to add the JSTL 1.1 library.
+--%>
+
+<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
+<%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
+
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+   "http://www.w3.org/TR/html4/loose.dtd">
+<f:view>
+	<f:loadBundle var="bundle" basename="bundles.bundle1"/>
+
+<html>
+  <head>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+        <title><h:outputText value="#{bundle['page.title']}"/></title>
+  <link rel="stylesheet" href="style/style.css" media="screen"/>
+    </head>
+    <body>
+	<h:form id="mainForm">
+    <h1><h:outputText value="#{bundle['page.header']}"/></h1>
+    	<h:messages/>
+		<h:panelGrid columns="2">
+    		<h:outputLabel for="userId" value="Username:"/>
+	    	<h:inputText id="userId" value="#{loginRequest.id}"/>
+	    	<h:outputLabel for="password" value="Password:"/>
+			<h:inputSecret id="password" value="#{loginRequest.passwordPlainText}"/>
+    	</h:panelGrid>
+   		<h:commandButton action="#{appController.loginActions}" value="#{bundle['login.button.value']}"/><br>
+		<h:dataTable var="row" border="1">
+			<h:column id="column1">
+				<f:facet name="header">
+					<h:outputText value="column1"></h:outputText>
+				</f:facet>
+			</h:column>
+			<h:column id="column2">
+				<f:facet name="header">
+					<h:outputText value="column2"></h:outputText>
+				</f:facet>
+			</h:column>
+		</h:dataTable>
+	</h:form>
+    
+    </body>
+</html>
+</f:view>
+
+
