I guess jstl.jar is not in the classpath, or perhaps you have not defined the c: namespace in your jsp/facelets template.
Also, make sure that namespace is correct. Facelets supports limited JSTL functionality (including c:if), but you need to be sure and use the http://java.sun.com/jsp/jstl/core namespace, not the earlier JSTL 1.0 namespace.
Have you resolved this problem yet? I'm experiencing something similar, only I'm not using Seam. Just standard jsp pages with JSTL. Tomcat is ignoring them.
It is hot topic on faselets forum. Specially <c:if? case. Your mistake is you are trying to use build-time tag as render-time.
For instance, instead of <c:if> almost always you should use rendered attribute.
Why doesn't my c:if / ui:repeat / ui:include work properly?
You're probably using a bad combination of build-time and render-time tags. For example, c:if is a build-time tag, so any EL expressions are only evaluated once (when the tree is built), even if you put it inside a ui:repeat or h:dataTable. Conversly, since ui:repeat is a 'render-time tag' (i.e. a UIComponent), you can't use it to iterate over build-time tags such as f:selectItem.
Build-time (facelet) tags:
· all JSTL tags (e.g. c:if, c:forEach, c:choose)
· all ui tags except ui:repeat (e.g. ui:include, ui:decorate, ui:composition)
· all core faces tags except f:verbatim (e.g. f:validator, f:convertNumber, f:selectItem)
Render-time tags (UIComponents):
· all UIComponent tags (e.g. ui:repeat, h:inputText, t:saveState)
I'm pretty sure we were both using JSTL correctly, but had the wrong namespace. If you don't specify the proper namespace facelets will happily just spit out your tag as text instead of performing the appropriate taglib processing. This is the problem we both had, and it's solved by using the above namespace.
That's not to say that other problems with EL, JSTL and Faclets aren't possible. I just don't think we experienced them here.