Re: [FOLLOWUP]jstl not working for me

Gene McCullough <[email protected]> Fri, 03 Jun 2005 16:53:28 -0500
Newsgroups gmane.comp.java.keel.devel
Message-ID <[email protected]>
I found my fix for this, and to some degree the problem.

I changed my output name from 'header' to 'keelheader'.  TADA!

What I think the problem stems from is my combination of struts, tiles, 
sitemesh, and jstl.  I *finally* discovered by iterating thru and 
printing the header response item, (it wasn't being detected as empty, 
and I was *assuming* it was my output from my model) that it was 
actually the PAGE headers.  If I switched back to the struts tags, it 
worked, so I'm guessing it has to do with scope.

But, as with a all true solutions, the key is asking the right question. 
  And I'm not quite to that point yet.  I've got a fix, and thought I'd 
share this little caveat (probably something I've done to myself somewhere).

Thanks for the help,
gene

Gene McCullough wrote:
> Thanks Shash.  No joy. With that code, i get following error:
> "${! header.map['nested'].empty}" contains invalid expression(s): 
> javax.servlet.jsp.el.ELException: Encountered "empty", expected one of 
> [<IDENTIFIER>]
> 
> i'll dig around some more, was just hoping I'd made a typo or syntax 
> error somewhere
> 
> Ciao
> gene
> 
> Sasvata (Shash) Chatterjee wrote:
> 
>> Gene,
>>
>> Can you try:
>>
>>    <c:if test="${! empty header}">
>>           <tr>
>>       <c:if test="${! header.map['nested'].empty}">
>>       not empty
>>       </c:if>
>>       <c:if test="${header.map['nested'].empty}">
>>       empty
>>       </c:if>
>>        </tr>
>>    </c:if>
>>
>> If that works, the explanation might be that since we are actually 
>> returning an ArrayList instead of a List directly, JSTL isn't working 
>> (evidently it only supports List and Map). The code above is supposed 
>> to use the "empty" property (or isEmpty() method) of ArrayList.  If 
>> the code above works, we should probably change line 69 in 
>> ResponseElementDynaBean from:
>>            ArrayList newNested = new ArrayList();
>> to
>>            List newNested = new ArrayList();
>>
>> If that doesn't work, I'm stumped as well.  If it does work, I'll 
>> still be stumped since ArrayList does implement List (I guess we could 
>> look at JSTL code to see what the heck it is doing).
>>
>> Shash
>>
>> Gene McCullough wrote:
>>
>>> Actually, I had, but had caught that one.  As you said, no error 
>>> messages, you just get the <c:if... tags showing up in your html.
>>>
>>> I'm stumped.  The code works for the menu outputs, and my model is 
>>> adding the nested outputs with the add method (the only way I know 
>>> to), and they show up using the struts taglib.
>>>
>>> i'll keep hacking
>>> thanks Louis
>>> gene
>>>
>>> Louis Moore wrote:
>>>
>>>> Sorry if this is too obvious, but did you forget to
>>>> add the taglib declaration to your jsp?
>>>> <%@ taglib uri="http://java.sun.com/jsp/jstl/core"
>>>> prefix="c"%>
>>>>
>>>> That's bitten me before, cuz it doesn't give you any
>>>> helpful error messages or anything.
>>>>
>>>> -Lou
>>>>
>>>> --- Gene McCullough <[email protected]> wrote:
>>>>
>>>>> I have this code in my jsp (ought to look familiar,
>>>>> i think i robbed it from app-crud at one point)
>>>>>
>>>>>         <logic:present name="header">
>>>>>            <tr>
>>>>>            <logic:iterate id="eachHeader"
>>>>> name="header" property="nested">
>>>>>               <td>
>>>>>               <logic:present name="eachHeader"
>>>>> property="attributes.sort">
>>>>>                 <keel:command link="true"
>>>>> name="eachHeader" property="attributes.sort">
>>>>>                 <strong><bean:write
>>>>> name="eachHeader"/></strong>
>>>>>                 </keel:command>
>>>>>               </logic:present>
>>>>>
>>>>>               <logic:notPresent name="eachHeader" 
>>>>> property="attributes.sort">
>>>>>                   <strong><bean:write
>>>>> name="eachHeader"/></strong>
>>>>>               </logic:notPresent>
>>>>>               </td>
>>>>>            </logic:iterate>
>>>>>            </tr>
>>>>>         </logic:present>
>>>>>
>>>>> That produces the desired results.
>>>>>
>>>>> Adding the following directly beneath in the same
>>>>> page produces the empty output.  Any suggestions?
>>>>>
>>>>>     <c:if test="${! empty header}">
>>>>>            <tr>
>>>>>        <c:if test="${! empty header.map['nested']}">
>>>>>        not empty
>>>>>        </c:if>
>>>>>        <c:if test="${empty header.map['nested']}">
>>>>>        empty
>>>>>        </c:if>
>>>>>         </tr>
>>>>>     </c:if>
>>>>> I also tried with header.map.nested, as in the
>>>>> menubar.jsp, with the same results.  the struts tags above can find 
>>>>> the
>>>>> outputs, can you see what I'm doing wrong with the jstl?
>>>>>
>>>>> TIA
>>>>> gene
>>>>> http://keelframework.org/documentation.shtml
>>>>> Keelgroup mailing list
>>>>> [email protected]
>>>>>
>>>>
>>>> http://lists.keelframework.com/listinfo.cgi/keelgroup-keelframework.com
>>>>
>>>> http://keelframework.org/documentation.shtml
>>>> Keelgroup mailing list
>>>> [email protected]
>>>> http://lists.keelframework.com/listinfo.cgi/keelgroup-keelframework.com
>>>>
>>> http://keelframework.org/documentation.shtml
>>> Keelgroup mailing list
>>> [email protected]
>>> http://lists.keelframework.com/listinfo.cgi/keelgroup-keelframework.com
>>
>>
>>
>>
>>
>> http://keelframework.org/documentation.shtml
>> Keelgroup mailing list
>> [email protected]
>> http://lists.keelframework.com/listinfo.cgi/keelgroup-keelframework.com
>>
> http://keelframework.org/documentation.shtml
> Keelgroup mailing list
> [email protected]
> http://lists.keelframework.com/listinfo.cgi/keelgroup-keelframework.com
> 
http://keelframework.org/documentation.shtml
Keelgroup mailing list
[email protected]
http://lists.keelframework.com/listinfo.cgi/keelgroup-keelframework.com