taglibs-user@jakarta.apache.org
[Top] [All Lists]

RE: <c:set> and runtime expressions

Subject: RE: <c:set> and runtime expressions
From: "Tarek Nabil"
Date: Wed, 5 Apr 2006 10:58:16 +0400
Thanks Kris. Very valuable information indeed.

I like the filter idea, or as one of the links you listed suggests, a
context listener would also do the trick.

Personally, I have nothing against reflection, in fact, I think it's one
of the greatest features ever, but when it comes to constants,
reflection should NOT be needed. So, it's just like doing something
extra for no reason. 

-----Original Message-----
From: Kris Schneider [mailto:kris@xxxxxxxxxx] 
Sent: Tuesday, April 04, 2006 4:51 PM
To: Tag Libraries Users List
Subject: Re: <c:set> and runtime expressions

Tarek Nabil wrote:
> Thanks a lot Kris for the explanation.
> 
> Actually, I'm starting to feel that moving to JSTL 1.0 was not such a 
> wise move. There are a lot of things that I used to be able to do with

> the Struts tag libraries that I can not do with JSTL. One of them is 
> the example I mentioned. Currently, the only work around for me is to 
> do this
> 
> <%
> Config config = Config.getIntance();
> %>
> 
> And then use config in later EL expressions. This is exactly what I 
> don't want to do, but unfortunately, it seems there's no other way 
> around it.

If that Config instance is likely to be required for most requests,
perhaps you can use a Filter to set the instance as a request attribute.
Or, if you're using Struts, have an Action do something similar before
forwarding.

> I'm starting to feel that JSTL has some severe limitations. Even with 
> 1.1, I ran before into the problem of not being able to use constants.
> Someone on this list kindly suggested the non standard tag library, 
> but the way it works (I guess) is that it uses reflection to expose 
> those static fields as properties, which is a very artificial 
> solution. I mean, why isn't this supported by default? I believe this 
> is a question for the JSR experts to answer.

Not sure why you'd characterize reflection that way, it's certainly a
naturally occurring part of JavaBeans (not to mention Struts and
BeanUtils). In fact, reflection was my approach to this very issue a few
years back when using Struts:

http://marc.theaimsgroup.com/?l=struts-user&m=103790677413408

Similar thread from this group:

http://marc.theaimsgroup.com/?l=taglibs-user&m=105889207116316

Lots of other ways to approach the problem, but it is recognized as an
issue:

"access to constants"
http://jsp-spec-public.dev.java.net/issues/show_bug.cgi?id=145

> -----Original Message-----
> From: Kris Schneider [mailto:kris@xxxxxxxxxx]
> Sent: Monday, April 03, 2006 5:57 PM
> To: Tag Libraries Users List
> Subject: Re: <c:set> and runtime expressions
> 
> Tarek Nabil wrote:
> 
>>So that means if I use the RT-based version, then I won't be able to
> 
> use
> 
>>EL? That's quite strange, because 1.1 could handle both, so it has to
> 
> be
> 
>>doable.
> 
> 
> In fact, that's exactly what it means. It's only as of JSP 2.0 that EL

> evaluation is done by the container. This means that both EL 
> expressions
> 
> and JSP expressions can be used as RT attribute values. So, JSTL 1.1 
> isn't really handling anything, it's the JSP 2.0 container. Since JSP 
> 1.2 doesn't do EL evaluation, it's up to a taglib (JSTL 1.0, for 
> example) to do it.
> That's why the versions of the JSTL 1.0 taglibs that support EL 
> evaluation have attributes with rtexprvalue = false.
> 
> 
>>-----Original Message-----
>>From: Kris Schneider [mailto:kris@xxxxxxxxxx]
>>Sent: Monday, April 03, 2006 6:26 AM
>>To: Tag Libraries Users List
>>Subject: Re: <c:set> and runtime expressions
>>
>>If you need to run JSTL 1.0 and want to use JSP expressions as
> 
> attribute
> 
>>values, you need to use the "RT-based" versions. For JSTL, there are 
>>basically two distinct versions of each taglib:
>>
>><%@ taglib prefix="c"    uri="http://java.sun.com/jstl/core"; %>
>><%@ taglib prefix="c_rt" uri="http://java.sun.com/jstl/core_rt"; %>
>>
>>If you look at the TLD files for JSTL 1.0, you'll see:
>>
>>c.tld:
>>------
>>   <tag>
>>     <name>set</name>
>>...
>>     <attribute>
>>         <name>value</name>
>>         <required>false</required>
>>         <rtexprvalue>false</rtexprvalue>
>>     </attribute>
>>...
>>   </tag>
>>
>>c-rt.tld:
>>---------
>>  <tag>
>>     <name>set</name>
>>...
>>     <attribute>
>>         <name>value</name>
>>         <required>false</required>
>>         <rtexprvalue>true</rtexprvalue>
>>     </attribute>
>>...
>>   </tag>
>>
>>JSTL 1.0 has to handle EL evaluation on its own (it's integrated into 
>>JSP 2.0 so JSTL 1.1 doesn't need to do the evaluation), so you're 
>>forced
> 
> to
> 
>>make a choice between different taglibs that use EL expressions or JSP
> 
> 
>>expressions.
>>
>>Tarek Nabil wrote:
>>
>>
>>>Hi everyone,
>>>
>>>
>>>
>>>I was using JSTL 1.1 in my application, and then unfortunately, I had
>>
>>to
>>
>>
>>>downgrade to 1.0. Now, my IDE is complaining about this line in my 
>>>JSP
>>>
>>>
>>>
>>>   <c:set var="config" value="<%= Config.getInstance() %>"/>
>>>
>>>
>>>
>>>It says "Attribute value does not accept runtime expressions.
>>>
>>>
>>>
>>>This used to work perfectly when I was using 1.1. I tried to look at
>>
>>the
>>
>>
>>>changes between 1.1 and 1.0 but I can not see anything related to 
>>>this issue. Is this really a difference between 1.0 and 1.1 or am I 
>>>doing something wrong?
>>>
>>>
>>>
>>>Thanks in advance for your help.

--
Kris Schneider <mailto:kris@xxxxxxxxxx>
D.O.Tech       <http://www.dotech.com/>

---------------------------------------------------------------------
To unsubscribe, e-mail: taglibs-user-unsubscribe@xxxxxxxxxxxxxxxxxx
For additional commands, e-mail: taglibs-user-help@xxxxxxxxxxxxxxxxxx
********************************************DISCLAIMER********************************************
This email and any files transmitted with it are confidential and contain 
privileged or copyright 
information. If you are not the intended recipient you must not copy, 
distribute or use this email
or the information contained in it for any purpose other than to notify us of 
the receipt thereof.
If you have received this message in error, please notify the sender 
immediately, and delete this
email from your system.

Please note that e-mails are susceptible to change.The sender shall not be 
liable for the improper
or incomplete transmission of the information contained in this 
communication,nor for any delay in
its receipt or damage to your system.The sender does not guarantee that this 
material is free from
viruses or any other defects although due care has been taken to minimise the 
risk.
**************************************************************************************************

---------------------------------------------------------------------
To unsubscribe, e-mail: taglibs-user-unsubscribe@xxxxxxxxxxxxxxxxxx
For additional commands, e-mail: taglibs-user-help@xxxxxxxxxxxxxxxxxx

<Prev in Thread] Current Thread [Next in Thread>