Today I spent quite some time to figure out why the following piece of code causes a Duplicate Id Error Message.

...
    <rich:columns value="#{myBean.listWithFields}" var="field" index="myIndex">
        <h:inputText id="#{field.identifier}" value="#{field.value}" rendered="#{field.inputField}"/>
        <h:outputText id="#{field.identifier}" value="#{field.value}" rendered="#{!field.inputField}"/>
    </rich:columns>
...

At the first glance, everything was ok: either the inputText or the outputText was rendered (after changing the IDs - otherwise the error prevents the rendering). Just when I tried to explain a colleague the problem, I just realized that both tags do exist (in the component tree?) but just one is rendered (what is exactly what the name of attribute rendered implies). Quite obvious, just think of render, re-render or not render elements via AJAX. Therefore, just one of the components can get the id stored in ‘’#{field.value}’’.

So, just keep in mind that just because a component is not rendered does not mean it does not exists.