Field Values In Dynamic Component Not Retaining After Error

We have used dynamic components in one piece of code and based on that experience since then have avoided them.

When normal Visualforce tags are used, the component tree is part of the serialized view state and that is necessary for the entered values to be displayed under error conditions. (The life cycle is likely to be this or similar.)

But you will notice that you have to use get methods for dynamic components and can't hold (non-transient) references to them. When we created a case on this (in 2013), the Salesforce support response was:

... dynamic components are not serializable ... is completely something working as designed ...

(Our assumption is that if they can't be serializable as controller fields they probably can't be serialized as part of the page component tree either.)

The bottom line appears to be that dynamic components don't behave well when errors occur. So the straightforward choices are to either just live with that or to re-implement without the dynamic components.

PS

Had another case where dynamic components were the simplest way and have successfully (so far) worked around the field value not being retained problem via JavaScript. See the answer to How to keep components out of the Visualforce view state when they are not needed?.