Mixing JSF and JSTL is often a recipe for trouble. I normally get this message when I've updated a JSF page definition and am trying to refresh it, but the cause is the same. Generally speaking, it means that the last display of the page doesn't match what you're currently attempting to output and the internal structure management is confused.
Normally the best way to enable/disable display of a JSF element is to use the "rendered" attribute, but I'm not sure if that applies to columns and I'm too lazy to read the manual. If that doesn't work, however,
you should be able to create logic to insert the column definition dynamically as needed.
The secret of how to be miserable is to constantly expect things are going to happen the way that they are "supposed" to happen.
You can have faith, which carries the understanding that you may be disappointed. Then there's being a willfully-blind idiot, which virtually guarantees it.