c:... are evaluated at compile time all others are evaluated at render time.
Best suggestion is to never use jstl tags with JSF. If you must, understand that they are executed *before* the components are built. There are WIKIs out there on this. Use the rendered attribute instead of c:if On Dec 13, 2007 1:56 PM, M Rather <[EMAIL PROTECTED]> wrote: > Hello, > > I have a jsf, myfaces, facelets, tomahawk, displaytag and c:forEach > question. My apologies if you see this question in some other boards > relevant to this discussion. > > This is the issue. > > I load a list of customers.. I loop thru each of them using > c:forEach, ui:repeat, displaytag and t:dataTable. All of them behave > differently, if <c:if test is used inside the body tag.. All of them are > incorrect except for c:forEach (there may be a different problem with > display tag, as I can't get it to show up in this page.) > > Below is the code for the page.. and the result follows it. The code is > self explanatory and the results show the discrepancy. I would > appreciate if someone could point out what I may be doing wrong, or if I > am not understanding how t:dataTable or ui:repeat works... Are there > issues with c:if evaluation at compile time versus runtime? Is there any > remedy to this? > > Thanks > MRather > > customerList.xhtml > ===============================CODE BEGIN > <html xmlns="http://www.w3.org/1999/xhtml" > xmlns:c="http://java.sun.com/jstl/core" > xmlns:f="http://java.sun.com/jsf/core" > xmlns:h="http://java.sun.com/jsf/html" > xmlns:ui="http://java.sun.com/jsf/facelets" > xmlns:t="http://myfaces.apache.org/tomahawk" > xmlns:acegi="http://sourceforge.net/projects/jsf-comp/acegijsf" > xmlns:fmt="http://java.sun.com/jsp/jstl/fmt" > xmlns:display="http://displaytag.sf.net"> > > > <ui:composition> > <c:set var="customers" value="${customerList.customers}" > scope="request" /> > > ==================== c:forEach =================<br/> > <c:forEach var="customer" items="${customers}" > > <c:set var="isOneC" value="NO" /> > <c:if test="${customer.id eq 1}"> > <c:set var="isOneC" value="YES" /> > </c:if> > ${customer.id} - ${customer.name} - ${isOneC} > <br/> > </c:forEach> > ==================== c:forEach =================<br/><br/><br/> > > > ==================== ui:repeat =================<br/> > <ui:repeat var="customer" value="${customers}" > > <c:set var="isOneUI" value="NO" /> > <c:if test="${customer.id eq 1}"> > <c:set var="isOneUI" value="YES" /> > </c:if> > ${customer.id} - ${customer.name} - ${isOneUI} > <br/> > </ui:repeat> > ==================== ui:repeat =================<br/><br/><br/> > > ==================== display:table =================<br/> > <display:table name="${customers}" /> > ==================== display:table =================<br/><br/><br/> > > ==================== t:dataTable =================<br/> > <t:dataTable var="customer" value="${customers}" > > <t:column styleClass="#{row.styleClass}"> > > <c:set var="isOneT" value="NO" /> > <crt:if test="${customer.id eq 1}"> > <c:set var="isOneT" value="YES" /> > </crt:if> > > ${customer.id} - ${isOneT} > </t:column> > <t:column styleClass="#{row.styleClass}"> > ${customer.name} > </t:column> > </t:dataTable> > ==================== t:dataTable =================<br/><br/><br/> > > > <ui:debug /> > </ui:composition> > </html> > ==========================================CODE END > > and below is the result. c:forEach works, but others don't > > > ==================== c:forEach =================RESULT BEGIN > 1 - cust1- YES > 2 - cust2 - NO > 3 - cust3 - NO > 4 - cust4- NO > 5 - cust5 - NO > 6 - cust6 - NO > 7 - cust7 - NO > 8 - cust8 - NO > 9 - cust9- NO > ==================== c:forEach ================= > > > ==================== ui:repeat ================= > 1 - cust1- NO > 2 - cust2 - NO > 3 - cust3 - NO > 4 - cust4- NO > 5 - cust5 - NO > 6 - cust6 - NO > 7 - cust7 - NO > 8 - cust8 - NO > 9 - cust9 - NO > ==================== ui:repeat ================= > > > ==================== display:table ================= > ==================== display:table ================= > > > ==================== t:dataTable ================= > 1 - YES cust1 > 2 - YES cust2 > 3 - YES cust3 > 4 - YES cust4 > 5 - YES cust5 > 6 - YES cust6 > 7 - YES cust7 > 8 - YES cust8 > 9 - YES cust9 > ==================== t:dataTable =================RESULT END > > > >

