Hans Bergsten wrote:
> Dror Matalon wrote:
>
>> Hans,
>>
>>
>> Thanks for the detailed response. One more question that's somewhat
>> related.  One of the most basic and powerful features in a language is
>> the ability to chain things, but I haven't seen any indications that you
>> can do this with tags, without going into Java. For instance let's say
>> that you have a tag that does concatenation and a tag that does toupper
>> (Converts things to upper case. You'd want to do
>>
>>
>>
>> <concat> first='a' second='b' </concat> ==> 'ab'
>> <toupper> string='aaa' </toupper> ==> 'AAA'
>>
>> I'd like to be able to do something like
>> <toupper>
>>         <concat> first='a' second='b' </concat>
>> </toupper>
>>
>> And have it produce 'AB', but seems like you can't do this with custom
>> JSP tags. Am I missing something? Is there a pattern that lets you do
>> this elegantly or somewhat elegantly?
>
>
> Sure you can. Just correcting your syntax a bit, this would do what you
> want:
>
>   <foo:toUpper>
>     <foo:concat first="a" second="b" />
>   </foo:toUpper>
>
> If the <foo:concat> action writes its result to the current output
> stream (pageContext.getOut()), and the <foo:toUpper> action reads
> its body, converts it, and writes it to the output stream, you get
> exactly what you want.
>
>> Is this something that would be easier to do with the EL?
>
>
> Not the "chaining" part; it's already part of how JSP actions work,
> and there are ways to make it more efficient than what I show here
> (by explicit chaining of streams between tag handlers), but that's
> overkill for most cases.
>
> On the other hand, the EL and JSTL already supports the "concat"
> function:
>
>   <foo:toUpper>
>     <c:out value="${a}${b} plus some static text, maybe" />
>   </foo:toUpper>
>
> Here I assume that "a" and "b" are dynamic values. As you can see,
> an attribute value that accepts dynamic values can be assigned with
> more than one EL expression, optionally mixed with static text.
> Each expression is evaluated and all results are concatenated.
>
> In JSP 2.0, you don't need to use the JSTL <c:out> action for this,
> since EL expressions can then be used directly in template text:
>
>   <foo:toUpper>
>     ${a}${b} plus some static text, maybe
>   </foo:toUpper>
>
> I hope this help,

I should add that with JSP 2.0 and EL functions, you'll also be able
to implement the "toUpper" functionality as an EL function, so the
example would look like this:

   ${foo:toUpper(a)}${foo:toUpper(b)} plus some static text

or, if you also implement a "concat" function, it could look like
this:

   ${foo:toUpper(foo:concat(a, b))} plus some static text

Hans

>> On Thu, Sep 12, 2002 at 10:32:39AM -0700, Hans Bergsten wrote:
>>
>>> Dror,
>>>
>>>
>>>> Good article. I also went back and read the first part where you were
>>>> talking about the JSTL expression language.
>>>>
>>>> How would development with the expression language compare to using a
>>>> template engine like Velocity in your opinion? It seems that there's a
>>>> lot of overlapping functionality.
>>>
>>>
>>> In my opinion, JSP and Velocity are two technologies with the exact same
>>> semantics (templates that mix static content with "code" to generate
>>> dynamic content); they just use different syntax for the "code" part.
>>> With JSTL and the EL, the syntax difference is minimized, but it still
>>> exist. For instance, JSP/JSTL uses XML-element syntax for things like
>>> loops and ifs, while Velocity includes features like this in their own
>>> language. The JSTL EL only lets you access data and do simple
>>> operations, such as compare values, add values, etc.
>>>
>>> The main argument against JSP from the Velocity camp has always been
>>> that since JSP allows you to include raw Java code in the template,
>>> "it sucks" (their words, not mine). Another argument has been that it
>>> is too hard to use JSP the "right way" since writing custom tags is
>>> too hard, which I can agree with to some extent. I think JSTL and the
>>> EL is a great improvement, since it minimizes the need for both custom
>>> tags and raw Java code. JSP 2.0 will introduce an easier way to
>>> write custom tags (using a special JSP file or as a Java class as today,
>>> but with a much simpler API). The EL defined for JSP 2.0 also adds
>>> support for function calls in an EL expression, and a function is much
>>> easier to write than a custom tag (it's just a static method, declared
>>> in the TLD). These two things will make it even is easier to use JSP
>>> the "right way".
>>>
>>> Hans
>>> --
>>> Hans Bergsten           [EMAIL PROTECTED]
>>> Gefion Software         http://www.gefionsoftware.com
>>> JavaServer Pages        http://TheJSPBook.com
>>>
>>> ===========================================================================
>>>
>>> To unsubscribe: mailto [EMAIL PROTECTED] with body: "signoff
>>> JSP-INTEREST".
>>> For digest: mailto [EMAIL PROTECTED] with body: "set JSP-INTEREST
>>> DIGEST".
>>> Some relevant FAQs on JSP/Servlets can be found at:
>>>
>>> http://archives.java.sun.com/jsp-interest.html
>>> http://java.sun.com/products/jsp/faq.html
>>> http://www.esperanto.org.nz/jsp/jspfaq.jsp
>>> http://www.jguru.com/faq/index.jsp
>>> http://www.jspinsider.com
>>
>>
>>
>> --
>> Dror Matalon
>> Zapatec Inc
>> 1700 MLK Way
>> Berkeley, CA 94709
>> http://www.zapatec.com
>>
>> ===========================================================================
>>
>> To unsubscribe: mailto [EMAIL PROTECTED] with body: "signoff
>> JSP-INTEREST".
>> For digest: mailto [EMAIL PROTECTED] with body: "set JSP-INTEREST
>> DIGEST".
>> Some relevant FAQs on JSP/Servlets can be found at:
>>
>>  http://archives.java.sun.com/jsp-interest.html
>>  http://java.sun.com/products/jsp/faq.html
>>  http://www.esperanto.org.nz/jsp/jspfaq.jsp
>>  http://www.jguru.com/faq/index.jsp
>>  http://www.jspinsider.com
>>
>
> --
> Hans Bergsten           [EMAIL PROTECTED]
> Gefion Software         http://www.gefionsoftware.com
> JavaServer Pages        http://TheJSPBook.com
>
> ===========================================================================
> To unsubscribe: mailto [EMAIL PROTECTED] with body: "signoff
> JSP-INTEREST".
> For digest: mailto [EMAIL PROTECTED] with body: "set JSP-INTEREST
> DIGEST".
> Some relevant FAQs on JSP/Servlets can be found at:
>
> http://archives.java.sun.com/jsp-interest.html
> http://java.sun.com/products/jsp/faq.html
> http://www.esperanto.org.nz/jsp/jspfaq.jsp
> http://www.jguru.com/faq/index.jsp
> http://www.jspinsider.com
>

--
Hans Bergsten           [EMAIL PROTECTED]
Gefion Software         http://www.gefionsoftware.com
JavaServer Pages        http://TheJSPBook.com

===========================================================================
To unsubscribe: mailto [EMAIL PROTECTED] with body: "signoff JSP-INTEREST".
For digest: mailto [EMAIL PROTECTED] with body: "set JSP-INTEREST DIGEST".
Some relevant FAQs on JSP/Servlets can be found at:

 http://archives.java.sun.com/jsp-interest.html
 http://java.sun.com/products/jsp/faq.html
 http://www.esperanto.org.nz/jsp/jspfaq.jsp
 http://www.jguru.com/faq/index.jsp
 http://www.jspinsider.com

Reply via email to