Tuesday, January 30, 2018, 3:42:28 PM, Woonsan Ko wrote:

> On Tue, Jan 30, 2018 at 3:45 AM, Daniel Dekany <ddek...@apache.org> wrote:
>> Monday, January 29, 2018, 11:20:02 PM, Woonsan Ko wrote:
>>
>>> Hi,
>>>
>>> While implementing @form.errors directive (migrated from spring
>>> form:errors taglib), I ended up adding 'messages' nested parameter
>>> like the following example:
>>>
>>> <@form.errors '*'; messages>
>>>   <#list messages as message>
>>>     ${message}
>>>   </#list>
>>> </@form.errors>
>>>
>>> As spring's form:errors jsp tag allows default rendering when there's
>>> no nested body content, I found the following example doesn't look
>>> very convenient. With 'messages' omitted, I got a template exception.
>>>
>>> <@form.errors 'firstName'; messages /> # rendering the default error
>>> info markups..
>>>
>>> So, I wonder if there's a way to omit the 'messages' nested parameter.
>>> The javadocs of CallPlace#getNestedContentParameterCount() and
>>> #executeNestedContent() say about the possibility with less nested
>>> parameters somehow, but I can't figure out how to make it flexible in
>>> the directive.
>>>
>>> Please let me know if you have any hints.
>>
>> I suppose nested content is allowed exactly if there's a nested
>> content argument (like `; message`). So you can decide if there's a
>> nested content argument with
>> CallPlace.getNestedContentParameterCount(), and if there isn't, then
>> you don't call CallPlace.executeNestedContent (but check if
>> CallPlace.hasNestedContent() returns `true`, in which case throw a
>> TemplateException that explains the problem), otherwise you call
>> CallPlace.executeNestedContent with 1 nested content argument.
>
> Thank you so much! Now, it's very clear to me. :-)
>
>>
>> Not sure if I'm missing something here. If not, what was the missing
>> piece? That information should be added to the API docs.
>
> I didn't understand this quite well yesterday: "If, however, you want
> to allow the caller to declare less parameters..."
> In my example, the 'caller' seems to mean the directive user (who is
> writing the directive in the template), and 'you' is I as a directive
> implementer. I read 'caller' as the directive code itself yesterday.

I don't follow this. You can call a directive. The caller is the FTL
tag that calls it, like <@foo />. (It's entered by some user,
obviously.) The directive itself is the called.

> That was my confusion. ;-)
> Perhaps would it be okay if I change the 'caller' to 'directive/function 
> user'?

Perhaps this: "allow the directive/function call to declare less
nested content parameters".

> Regards,
>
> Woonsan
>
>>
>>> Regards,
>>>
>>> Woonsan
>>
>> --
>> Thanks,
>>  Daniel Dekany
>>
>

-- 
Thanks,
 Daniel Dekany

Reply via email to