Hi,
  I've updated the xdoclet JSF module files, so that it now supports more
manage-property types than plain value (value-ref is outdated in current
JSF spec). 
Now the module is useful enough to use it in production. 

Now one can specify all specified types of values in the following way:

<null-value/> :
/**
 * @jsf.managed-property
 *      type="null"
 */

<value> :
/**
 * @jsf.managed-property
 *      type="value"
 * @jsf.managed-property-value
 *      value="sometext"
 */

<list-entries> :

/**
 * @jsf.managed-property
 *      type="list-entries"
 *      value-class="String"

 * @jsf.managed-property-value
 *              value="blabla1"

 * @jsf.managed-property-value
 *              value="null"

 * @jsf.managed-property-value
 *              value="blabla2"
 */

<map-entries> :
/**
 * @jsf.managed-property
 *      type="map-entries"
 *      key-class="String"
 *      value-class="String"

 * @jsf.managed-property-value
 *              key="k1"
 *              value="blabla1"

 * @jsf.managed-property-value
 *              key="k2"
 *              value="null"

 * @jsf.managed-property-value
 *              key="k3"
 *              value="blabla2"
 */


Pawel Lipinski
<?xml version="1.0" encoding="<XDtConfig:configParameterValue paramName="Xmlencoding"/>" ?>

<!DOCTYPE faces-config PUBLIC "<XDtXml:publicId/>" "<XDtXml:systemId/>">
<faces-config>

    <XDtClass:forAllClasses>
    <XDtClass:ifHasClassTag tagName="jsf.bean">
    <XDtClass:forAllClassTags tagName="jsf.bean">
   <managed-bean>
      <managed-bean-name><XDtClass:classTagValue tagName="jsf.bean" paramName="name"/></managed-bean-name>
      <managed-bean-class><XDtClass:fullTransformedClassName/></managed-bean-class>
      <managed-bean-scope><XDtClass:classTagValue tagName="jsf.bean" paramName="scope"/></managed-bean-scope>
      <XDtMethod:forAllMethods>
        <XDtMethod:ifHasMethodTag tagName="jsf.managed-property">
        <managed-property>        	
            <XDtMethod:ifHasMethodTag tagName="jsf.managed-property" paramName="name">
            <property-name><XDtMethod:methodTagValue tagName="jsf.managed-property" paramName="name"/></property-name>
            </XDtMethod:ifHasMethodTag>
            <XDtMethod:ifDoesntHaveMethodTag tagName="jsf.managed-property" paramName="name">
            <property-name><XDtMethod:propertyName/></property-name>
		    </XDtMethod:ifDoesntHaveMethodTag>
            <XDtMethod:ifHasMethodTag tagName="jsf.managed-property" paramName="type">
        	<XDtMethod:ifMethodTagValueEquals tagName="jsf.managed-property" paramName="type" value="null">
        	<null-value/>
        	</XDtMethod:ifMethodTagValueEquals>
        	<XDtMethod:ifMethodTagValueEquals tagName="jsf.managed-property" paramName="type" value="value">
        	<value><XDtMethod:methodTagValue tagName="jsf.managed-property-value" paramName="value"/></value>
        	</XDtMethod:ifMethodTagValueEquals>        	
        	<XDtMethod:ifMethodTagValueEquals tagName="jsf.managed-property" paramName="type" value="map-entries">
        	<map-entries>
        		<XDtMethod:ifHasMethodTag tagName="jsf.managed-property" paramName="key-class">
            	<key-class><XDtMethod:methodTagValue tagName="jsf.managed-property" paramName="key-class"/></key-class>
            	</XDtMethod:ifHasMethodTag>
           		<XDtMethod:ifHasMethodTag tagName="jsf.managed-property" paramName="value-class">
            	<value-class><XDtMethod:methodTagValue tagName="jsf.managed-property" paramName="value-class"/></value-class>
            	</XDtMethod:ifHasMethodTag>
            	<XDtMethod:forAllMethodTags tagName="jsf.managed-property-value">   
            	<map-entry>           	      	           		            	 
            	<XDtMethod:ifHasMethodTag tagName="jsf.managed-property-value" paramName="key">            	
            	<key><XDtMethod:methodTagValue tagName="jsf.managed-property-value" paramName="key"/></key>
            	</XDtMethod:ifHasMethodTag>        
            	<XDtMethod:ifMethodTagValueEquals tagName="jsf.managed-property-value" paramName="value" value="null">
            	<null-value/>
            	</XDtMethod:ifMethodTagValueEquals>         
            	<XDtMethod:ifMethodTagValueNotEquals tagName="jsf.managed-property-value" paramName="value" value="null">
            	<value><XDtMethod:methodTagValue tagName="jsf.managed-property-value" paramName="value"/></value><
	           	</XDtMethod:ifMethodTagValueNotEquals>         
	           	</map-entry>
            	</XDtMethod:forAllMethodTags>            	                       	
            </map-entries>
        	</XDtMethod:ifMethodTagValueEquals>
        	<XDtMethod:ifMethodTagValueEquals tagName="jsf.managed-property" paramName="type" value="list-entries">
        	<list-entries>       
        		<XDtMethod:ifHasMethodTag tagName="jsf.managed-property" paramName="value-class">
            	<value-class><XDtMethod:methodTagValue tagName="jsf.managed-property" paramName="value-class"/></value-class>
            	</XDtMethod:ifHasMethodTag> 		           		    	           		            	
            	<XDtMethod:forAllMethodTags tagName="jsf.managed-property-value">               	       
            	<XDtMethod:ifMethodTagValueEquals tagName="jsf.managed-property-value" paramName="value" value="null">
            	<null-value/>
            	</XDtMethod:ifMethodTagValueEquals>         
            	<XDtMethod:ifMethodTagValueNotEquals tagName="jsf.managed-property-value" paramName="value" value="null">
            	<value><XDtMethod:methodTagValue tagName="jsf.managed-property-value" paramName="value"/></value>
	           	</XDtMethod:ifMethodTagValueNotEquals>         
            	</XDtMethod:forAllMethodTags>            	           	
            </list-entries>
        	</XDtMethod:ifMethodTagValueEquals>   
        	</XDtMethod:ifHasMethodTag>     	        	                                                                                                                                                   
        </managed-property>
        </XDtMethod:ifHasMethodTag>
      </XDtMethod:forAllMethods>
   </managed-bean>
   </XDtClass:forAllClassTags>
   </XDtClass:ifHasClassTag>
    </XDtClass:forAllClasses>
	 
   <XDtMerge:merge file="jsf-beans.xml">
    <!-- If you have non XDoclet beans, define them in a file called jsf-beans.xml and place it in your merge directory. -->
   </XDtMerge:merge>

    <XDtFacesNavigation:forAllViews>
   <navigation-rule>
      <from-view-id><XDtFacesNavigation:fromView/></from-view-id>
      <XDtFacesNavigation:forAllRules>
      <navigation-case>
         <from-outcome><XDtFacesNavigation:outcome/></from-outcome>
         <to-view-id><XDtFacesNavigation:toView/></to-view-id>
      </navigation-case>
      </XDtFacesNavigation:forAllRules>
   </navigation-rule>
    </XDtFacesNavigation:forAllViews>

   <XDtMerge:merge file="jsf-navigations.xml">
    <!-- If you have non XDoclet navigation rules, define them in a file called jsf-navigations.xml and place it in your merge directory. -->
   </XDtMerge:merge>

   <XDtMerge:merge file="jsf-application.xml">
    <!-- To specify application level settings use jsf-application.xml and place it in your merge file -->
   </XDtMerge:merge>

   <XDtClass:forAllClasses type="javax.faces.validator.Validator">
   	<XDtClass:ifHasClassTag tagName="jsf.validator">
      <validator>
      	<validator-id><XDtClass:classTagValue tagName="jsf.validator" paramName="name"/></validator-id>
      	<validator-class><XDtClass:fullClassName/></validator-class>
      	<XDtMethod:forAllMethods>
      	<XDtMethod:ifHasMethodTag tagName="jsf.validator-attribute">
      	<attribute>
      		<attribute-name><XDtMethod:propertyName/></attribute-name>
      		<attribute-class><XDtMethod:methodType/></attribute-class>
      	</attribute>
      	</XDtMethod:ifHasMethodTag>
      	</XDtMethod:forAllMethods>
      </validator>
      </XDtClass:ifHasClassTag>
   </XDtClass:forAllClasses>

   <XDtMerge:merge file="jsf-validators.xml">
    <!-- If you have non XDoclet validators, define them in a file called jsf-validators.xml and place it in your merge directory. -->
   </XDtMerge:merge>

   <XDtClass:forAllClasses type="javax.faces.convert.Converter">
   	<XDtClass:ifHasClassTag tagName="jsf.converter">
      <converter>
      <XDtClass:ifHasClassTag tagName="jsf.converter" paramName="description">
      <description>
      <XDtClass:classTagValue tagName="jsf.converter" paramName="description"/>
      </description>
      </XDtClass:ifHasClassTag>
      	<converter-id><XDtClass:classTagValue tagName="jsf.converter" paramName="name"/></converter-id>
      	<converter-class><XDtClass:fullClassName/></converter-class>
      </converter>
      </XDtClass:ifHasClassTag>
   </XDtClass:forAllClasses>

   <XDtMerge:merge file="jsf-converters.xml">
    <!-- If you have non XDoclet converters, define them in a file called jsf-converters.xml and place it in your merge directory. -->
   </XDtMerge:merge>


   <XDtClass:forAllClasses>                                     
    <XDtClass:ifHasClassTag tagName="jsf.component">
      <component>
        <XDtClass:ifHasClassTag tagName="jsf.component" paramName="description">
          <description><XDtClass:classTagValue tagName="jsf.component" paramName="description"/></description>
        </XDtClass:ifHasClassTag>
        <XDtClass:ifHasClassTag tagName="jsf.component" paramName="display-name">
          <display-name><XDtClass:classTagValue tagName="jsf.component" paramName="display-name"/></display-name>
        </XDtClass:ifHasClassTag>
        <XDtClass:ifHasClassTag tagName="jsf.component" paramName="icon">
          <icon><XDtClass:classTagValue tagName="jsf.component" paramName="icon"/></icon>
        </XDtClass:ifHasClassTag>
        <component-type><XDtClass:classTagValue tagName="jsf.component" paramName="type"/></component-type>
        <component-class><XDtClass:fullClassName/></component-class>
        <XDtMethod:forAllMethods>
        <XDtMethod:ifHasMethodTag tagName="jsf.component-attribute">
        <attribute>
            <XDtMethod:ifHasMethodTag tagName="jsf.component-attribute" paramName="description">
            <description><XDtMethod:methodTagValue tagName="jsf.component-attribute" paramName="description"/></description>
            </XDtMethod:ifHasMethodTag>
            <XDtMethod:ifHasMethodTag tagName="jsf.component-attribute" paramName="display-name">
            <display-name><XDtMethod:methodTagValue tagName="jsf.component-attribute" paramName="display-name"/></display-name>
            </XDtMethod:ifHasMethodTag>
            <XDtMethod:ifHasMethodTag tagName="jsf.component-attribute" paramName="icon">
            <icon><XDtMethod:methodTagValue tagName="jsf.component-attribute" paramName="icon"/></icon>
            </XDtMethod:ifHasMethodTag>
            <attribute-name><XDtMethod:propertyName/></attribute-name>
            <attribute-class><XDtMethod:methodType/></attribute-class>
            <XDtMethod:ifHasMethodTag tagName="jsf.component-attribute" paramName="default-value">
            <default-value><XDtMethod:methodTagValue tagName="jsf.component-attribute" paramName="default-value"/></default-value>
            </XDtMethod:ifHasMethodTag>
            <XDtMethod:ifHasMethodTag tagName="jsf.component-attribute" paramName="suggested-value">
            <suggested-value><XDtMethod:methodTagValue tagName="jsf.component-attribute" paramName="suggested-value"/></suggested-value>
            </XDtMethod:ifHasMethodTag>
        </attribute>
        </XDtMethod:ifHasMethodTag>
        </XDtMethod:forAllMethods>
        <XDtMethod:forAllMethods>
          <XDtMethod:ifHasMethodTag tagName="jsf.component-property">
          <property>
            <XDtMethod:ifHasMethodTag tagName="jsf.component-property" paramName="description">
            <description><XDtMethod:methodTagValue tagName="jsf.component-property" paramName="description"/></description>
            </XDtMethod:ifHasMethodTag>
            <XDtMethod:ifHasMethodTag tagName="jsf.component-property" paramName="display-name">
            <display-name><XDtMethod:methodTagValue tagName="jsf.component-property" paramName="display-name"/></display-name>
            </XDtMethod:ifHasMethodTag>
            <XDtMethod:ifHasMethodTag tagName="jsf.component-property" paramName="icon">
            <icon><XDtMethod:methodTagValue tagName="jsf.component-property" paramName="icon"/></icon>
            </XDtMethod:ifHasMethodTag>
            <property-name><XDtMethod:propertyName/></property-name>
            <property-class><XDtMethod:methodType/></property-class>
            <XDtMethod:ifHasMethodTag tagName="jsf.component-property" paramName="default-value">
            <default-value><XDtMethod:methodTagValue tagName="jsf.component-property" paramName="default-value"/></default-value>
            </XDtMethod:ifHasMethodTag>
            <XDtMethod:ifHasMethodTag tagName="jsf.component-property" paramName="suggested-value">
            <suggested-value><XDtMethod:methodTagValue tagName="jsf.component-property" paramName="suggested-value"/></suggested-value>
            </XDtMethod:ifHasMethodTag>
          </property>
          </XDtMethod:ifHasMethodTag>
        </XDtMethod:forAllMethods>
        <XDtClass:ifHasClassTag tagName="jsf.component" paramName="family">
        <component-extension>
            <component-family><XDtClass:classTagValue tagName="jsf.component" paramName="family"/></component-family>
        </component-extension>
        </XDtClass:ifHasClassTag>
      </component>
      </XDtClass:ifHasClassTag>
   </XDtClass:forAllClasses>

   <XDtMerge:merge file="jsf-components.xml">
    <!-- If you have non XDoclet components, define them in a file called jsf-components.xml and place it in your merge directory. -->
	</XDtMerge:merge>

   <XDtClass:forAllClasses>                                     
    <XDtClass:ifHasClassTag tagName="jsf.render-kit">
      <render-kit>
        <XDtClass:ifHasClassTag tagName="jsf.render-kit" paramName="description">
          <description><XDtClass:classTagValue tagName="jsf.render-kit" paramName="description"/></description>
        </XDtClass:ifHasClassTag>
		  <renderer>
		    <XDtClass:ifHasClassTag tagName="jsf.render-kit" paramName="component-family">
			    <component-family><XDtClass:classTagValue tagName="jsf.render-kit" paramName="component-family"/></component-family>
		    </XDtClass:ifHasClassTag>
		    <XDtClass:ifHasClassTag tagName="jsf.render-kit" paramName="renderer-type">
            <renderer-type><XDtClass:classTagValue tagName="jsf.render-kit" paramName="renderer-type"/></renderer-type>
          </XDtClass:ifHasClassTag>
		    <XDtClass:ifHasClassTag tagName="jsf.render-kit" paramName="renderer-class">
            <renderer-class><XDtClass:classTagValue tagName="jsf.render-kit" paramName="renderer-class"/></renderer-class>
          </XDtClass:ifHasClassTag>
		    <XDtClass:ifDoesntHaveClassTag tagName="jsf.render-kit" paramName="renderer-class">
            <renderer-class><XDtClass:fullClassName/></renderer-class>
		    </XDtClass:ifDoesntHaveClassTag>
	     </renderer>
      </render-kit>
      </XDtClass:ifHasClassTag>
   </XDtClass:forAllClasses>

   <XDtMerge:merge file="jsf-render-kits.xml">
    <!-- If you have non XDoclet render-kits, define them in a file called jsf-render-kits.xml and place it in your merge directory. -->
	</XDtMerge:merge>
</faces-config>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xdoclet PUBLIC "-//XDoclet Team//DTD XDoclet Tags 1.1//EN" "http://xdoclet.sourceforge.net/dtds/xtags_1_1.dtd";>
<xdoclet>
	<namespace>
		<name>jsf</name>
		<usage-description>
      Defines managed beans and navigation rules for jsf applications
		</usage-description>
		<tags>
			<tag>
				<level>class</level>
				<name>jsf.bean</name>
				<usage-description>Defines a managed bean and its attributes.</usage-description>
				<unique>true</unique>
				<parameter type="text">
					<name>name</name>
					<usage-description>Define a unique name for the bean.</usage-description>
					<mandatory>true</mandatory>
				</parameter>
				<parameter type="text">
					<name>scope</name>
					<usage-description>Define the scope of the action. "request" | "session" | "application"</usage-description>
					<mandatory>false</mandatory>
					<option-sets>
						<option-set>
							<default>request</default>
							<options>
								<option>request</option>
								<option>session</option>
								<option>application</option>
							</options>
						</option-set>
					</option-sets>
				</parameter>
			</tag>
			<tag>
				<level>class</level>
				<name>jsf.navigation</name>
				<usage-description>specify navigation rules for the jsf application</usage-description>
				<unique>false</unique>
				<parameter type="text">
					<name>from</name>
					<usage-description/>
					<mandatory>true</mandatory>
				</parameter>
				<parameter type="text">
					<name>to</name>
					<usage-description/>
					<mandatory>true</mandatory>
				</parameter>
				<parameter type="text">
					<name>result</name>
					<usage-description/>
					<mandatory>true</mandatory>
				</parameter>
			</tag>
			<tag>
				<level>method</level>
				<name>jsf.managed-property</name>
				<usage-description>Defines a managed property for a managed bean</usage-description>
				<unique>false</unique>
				<parameter type="text">
					<name>name</name>
					<usage-description>Define the name of the property</usage-description>
					<mandatory>false</mandatory>
				</parameter>
				<parameter type="text">
					<name>type</name>
					<usage-description>Define the type of the property</usage-description>
					<mandatory>true</mandatory>										
					<unique>true</unique>					
				</parameter>
				<parameter type="text">
					<name>key-class</name>
					<usage-description>Define the type of keys for the property</usage-description>
					<mandatory>false</mandatory>
				</parameter>
				<parameter type="text">
					<name>value-class</name>
					<usage-description>Define the type of values of the property</usage-description>
					<mandatory>false</mandatory>
				</parameter>
			</tag>			
			<tag>
				<level>method</level>
				<name>jsf.managed-property-value</name>
				<usage-description>Defines a value for a managed property</usage-description>
				<unique>false</unique>
				<parameter type="text">
					<name>key</name>
					<usage-description>Define the initial value of the property</usage-description>
					<mandatory>false</mandatory>
				</parameter>
				<parameter type="text">
					<name>value</name>
					<usage-description>Define the initial value of the property</usage-description>
					<mandatory>false</mandatory>
				</parameter>
			</tag>
			<tag>
				<level>class</level>
				<name>jsf.validator</name>
				<usage-description>Mark the class as implementation of JSF Validator interface</usage-description>
				<unique>true</unique>
				<parameter type="text">
					<name>name</name>
					<usage-description>The unique id of the jsf validator which is used to reference it</usage-description>
					<mandatory>true</mandatory>
				</parameter>
			</tag>
			<tag>
				<level>method</level>
				<name>jsf.validator-attribute</name>
				<usage-description>mark the methode as getter methode for a validator attribute. Attribute name and type are read from the methode signature</usage-description>
				<unique>false</unique>
			</tag>

			<tag>
				<level>class</level>
				<name>jsf.converter</name>
				<usage-description>Mark the class as implementation of JSF Converter interface</usage-description>
				<unique>true</unique>
				<parameter type="text">
					<name>name</name>
					<usage-description>The unique id of the jsf converter which is used to reference it</usage-description>
					<mandatory>true</mandatory>
				</parameter>
				<parameter type="text">
					<name>description</name>
					<usage-description>An additional description, describing the converters usage</usage-description>
					<mandatory>false</mandatory>
				</parameter>
			</tag>

			<tag>
				<level>class</level>
				<name>jsf.render-kit</name>
				<usage-description>Define a customer render kit</usage-description>
				<unique>true</unique>
				<parameter type="text">
					<name>description</name>
					<usage-description>A description of the render kit</usage-description>
					<mandatory>false</mandatory>
				</parameter>
				<parameter type="text">
					<name>component-family</name>
					<usage-description>The component family of this render kit</usage-description>
					<mandatory>false</mandatory>
				</parameter>
				<parameter type="text">
					<name>renderer-type</name>
					<usage-description>The renderer type</usage-description>
					<mandatory>false</mandatory>
				</parameter>
				<parameter type="text">
					<name>renderer-class</name>
					<usage-description>The renderer class</usage-description>
					<mandatory>false</mandatory>
				</parameter>
			</tag>
		</tags>
	</namespace>
</xdoclet>

Reply via email to