On Tue, Sep 5, 2017 at 8:58 AM, Woonsan Ko <woon...@apache.org> wrote: > On Sun, Sep 3, 2017 at 7:55 AM, Daniel Dekany <ddek...@apache.org> wrote: >> Sunday, September 3, 2017, 6:29:54 AM, Woonsan Ko wrote: >> >>> On Sat, Sep 2, 2017 at 7:33 PM, Woonsan Ko <woon...@apache.org> wrote: >>>> On Sat, Sep 2, 2017 at 3:36 AM, Daniel Dekany <ddek...@apache.org> wrote: >>>>> Saturday, September 2, 2017, 5:24:11 AM, Woonsan Ko wrote: >>>>> >>>>>> On Thu, Aug 24, 2017 at 4:04 PM, Daniel Dekany <ddek...@apache.org> >>>>>> wrote: >>>>>>> Thursday, August 24, 2017, 9:53:11 AM, Daniel Dekany wrote: >>>>>>> >>>>>>>> Thursday, August 24, 2017, 6:19:29 AM, Woonsan Ko wrote: >>>>>>>> >>>>>>>>> On Mon, Aug 21, 2017 at 12:19 AM, Daniel Dekany <ddek...@apache.org> >>>>>>>>> wrote: >>>>>>>>>> Monday, August 7, 2017, 9:18:36 PM, Woonsan Ko wrote: >>>>>>>>>> >>>>>>>>>>> On Mon, Aug 7, 2017 at 11:03 AM, Daniel Dekany <ddek...@apache.org> >>>>>>>>>>> wrote: >>>>>>>>>>>> If you are going to implement these directly as >>>>>>>>>>>> TemplateDirectiveModel-s and TemplateFunctionModel-s, then you >>>>>>>>>>>> better >>>>>>>>>>>> wait until I merge at least the FREEMARKER-63 PR... probably also >>>>>>>>>>>> FREEMARKER-64. I will try to do that tonight. At least 63. >>>>>>>>>>> >>>>>>>>>>> OK, I'll watch and wait for that. :-) >>>>>>>>>> >>>>>>>>>> FREEMARKER-63, 64 and 65 has been committed. Try to use CallableUtils >>>>>>>>>> for argument validation and other exception creation. See >>>>>>>>>> AssertFailsDirective as an example. Of course, ideas for improving >>>>>>>>>> CallableUtils are highly welcome. >>>>>>>>>> >>>>>>>>>> BTW, certainly there are several TemplateFunctionModel and >>>>>>>>>> TemplateDirectiveModel implementations that could but don't yet use >>>>>>>>>> CallableUtils for argument validation. If you spot some, you may go >>>>>>>>>> ahead and improve them. >>>>>>>>> >>>>>>>>> Thank you so much! I've briefly browsed the PRs linked from the JIRA >>>>>>>>> tickets, and it is really great! >>>>>>> >>>>>>> Though you better look at the examples in the 3.0 branch, because >>>>>>> FREEMARKER-65 wasn't a PR; I have committed it directly there. (Maybe >>>>>>> I shouldn't do that.) >>>>>>> >>>>>>>>> Really easy to extend it with >>>>>>>>> TemplateCallableModel. Very simple but really powerful! I also saw >>>>>>>>> IncludePage directive (as named "include_page") in >>>>>>>>> freemarker-servlet; it looks really straightforward. >>>>>>>>> I'll try to write equivalent directives or functions from spring JSP >>>>>>>>> Tag Library [1] and spring-form JSP Tag Library [2]. >>>>>>>> >>>>>>>> Certainly quite a few changes will be needed compared to the JSP >>>>>>>> taglib. One such question if when and how escaping related >>>>>>>> functionality will appear, as escaping is a core facility in FTL. >>>>>>>> Also there are strange things like `<spring:url path=... var='v'>`. >>>>>>>> I'm not sure why that isn't a function (used like >>>>>>>> <c:set v=spring:ulr(path)>)... >>>>>>> >>>>>>> With correct JSP syntax that actually would be >>>>>>> >>>>>>> <c:set var="v" value="${spring:url("somePath")}"> >>>>>>> >>>>>>> if spring:url was a function. So it's kind of understandable that they >>>>>>> rather go with >>>>>>> >>>>>>> <spring:url path="somePath" var="v" /> >>>>>>> >>>>>>> But in FreeMarker it would be just: >>>>>>> >>>>>>> <#assign v = spring.url("somePath")> >>>>>>> >>>>>>> or if you want to print it into the HTML: >>>>>>> >>>>>>> <a href="${spring.url("somePath")}"> >>>>>>> >>>>>>> So this was a case where what's a custom tag in JSP should be a >>>>>>> function in FreeMarker, not a directive. >>>>>>> >>>>>>>> Also note that in FTL you can have positional parameters for >>>>>>>> directives, and named parameters for functions. >>>>>>> >>>>>>> Usually, if a directive has a required parameter, whose meaning is >>>>>>> obvious for almost anybody, then that should be a positional >>>>>>> parameter. A very clear case of this is <#if something>. A less clear >>>>>>> case, but still maybe a good idea is making the "path" parameter of >>>>>>> form:input, form:label etc. positional: >>>>>>> >>>>>>> <tr> >>>>>>> <td><@form.label "contactPerson">Contact person</@></td> >>>>>>> <td><@form.input "contactPerson"/></td> >>>>>>> </tr> >>>>>>> >>>>>>> I think anyone who knows even a little about Spring forms will know >>>>>>> that "contactPerson" is the property name in the backing form bean. Or >>>>>>> if not, path="contactPerson" is not much more helpful either. >>>>>>> >>>>>>> Another place where FreeMarker differs from the approach of the Spring >>>>>>> JSP tags is when you refer to a value of the model (or to any Servlet >>>>>>> attribute). Like, you have an "employee" bean in the Spring Model, and >>>>>>> as far as I see in JSP you are supposed to bind that to a form like >>>>>>> this: >>>>>>> >>>>>>> <form:form action="/storeEmployee" modelAttribute="employee"> >>>>>>> >>>>>>> While technically possible, that's quote alien from FreeMarker. If the >>>>>>> directive wants to do something with the `emloyee` object, then pass >>>>>>> the object itself to it as argument, not the name of it. Like this: >>>>>>> >>>>>>> <@form.form action="/storeEmployee" model=employee> >>>>>>> >>>>>>> Unless, the `form` directive indeed has to know the *name* of the >>>>>>> variable, as opposed to just the value of it... I'm not sure if that's >>>>>>> the case here. But I have seen this patter a few times in JSP (pass >>>>>>> the name of something instead of the thing itself), and had the >>>>>>> feeling that often it's just to avoid the more noisy >>>>>>> `model="${employee}"` syntax. FreeMarker has no such problem, as it's >>>>>>> just `model=employee` there, which is even less verbose than passing >>>>>>> the name of the variable. >>>>>>> >>>>>>>> Also that a value can be both a function and a directive; maybe >>>>>>>> useful for message printing. If called like a function, it returns a >>>>>>>> string, if called like a tag, it prints the message without >>>>>>>> escaping... maybe. >>>>>>> >>>>>>> So that practically means that these two will be equivalent: >>>>>>> >>>>>>> <@spring.message "foo" /> >>>>>>> >>>>>>> ${spring.message("foo")?noEsc} >>>>>>> >>>>>>> Now this is maybe too confusing for most users and thus is a bad idea. >>>>>>> But if spring.message will only have one type, then that's surely >>>>>>> function, not directive (unlike in the FM2 Spring integration). >>>>>> >>>>>> <spring:message /> tag also has many optional parameters: message, >>>>>> code, arguments, argumentSeparator, text, var, scope, htmlEscape and >>>>>> javaScriptEscape. Without 'var' support by a directive, it means >>>>>> invoking the function for the same parameters every time. code means >>>>>> resource bundle key, text means default value if not found, and >>>>>> message means an argument for the Spring-specific >>>>>> MessageSourceResolvable. So, in this specific case, I don't know which >>>>>> one should take the positional parameter. Perhaps 'code'? >>>>> >>>>> Yes. That's the only required parameter to start with. Also, if you >>>> >>>> One problem is that 'code' is not required in spring tag. Perhaps >>>> someones are using the tag without 'code' in some cases. >>>> I assume the only positional parameter for 'code' in FTL function >>>> could be optional with default value being null, right? >>> >>> I've tried with the idea as spring.message function: >>> - >>> https://github.com/woonsan/incubator-freemarker/blob/feature/FREEMARKER-55-2/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/MessageFunction.java >> >> An argument is a string exactly if it implements TemplateStringModel. >> Then TemplateStringModel.getAsString() returns the String object. It >> doesn't mater what does it wrap, if anything. Also, because of the >> toString(), the current code accepts any kind of object. > > Thanks for the pointer! > I've replaced it with CallableUtils.getOptionalStringArgument(args, > CODE_PARAM_IDX, this). > >> >> Also, for generating exceptions, CallableUtils should be used wherever >> possible. > > Cool! Updated those accordingly, too. > >> >>> It reads 'code' and message arguments from positional vargs, with no >>> predefined positional args since it should support 'message' named >>> parameter without 'code'. >> >> "code" is still a predefined positional argument (even if optional >> because of the named "message" param). After that there's a varargs >> parameter for the message parameters only. >> >>> For example, >>> <th>${spring.message("user.firstName")!}</th> >>> <p>${spring.message("user.form.message", user.firstName, >>> user.lastName, user.email)?html}</p> >> >> Note that `?html` is old-style, as we prefer HTML auto-escaping for a >> while. So we should use `?jsString` if we want to demonstrate explicit >> escaping. > > Right. I updated the example simply to have <#ftl outputFormat="HTML">. > I'll move onto the rest of spring.tld tags and form.tld tags.
I've proposed a PR for tags defined in spring.tld for now: https://github.com/apache/incubator-freemarker/pull/34 I'll continue to replace tags in form.tld. Thanks, Woonsan > > Cheers, > > Woonsan > >> >>> (ref: >>> https://github.com/woonsan/spring-mvc-freemarker3-demo/blob/master/src/main/webapp/WEB-INF/views/useredit.ftl) >>> >>> Still need to add an example using 'message' named parameter. >>> >>> Regards, >>> >>> Woonsan >>> >>>> >>>>> look at `spring.message("foo")`, I think you would intuitively think >>>>> that it prints the "foo" message. As of the others, I guess we don't >>>>> need "text" as you can write ${spring.message("foo")!'default'}, nor >>>>> do we need the xxxEscape parameters, as we have HTML auto-escaping and >>>>> `spring.message("foo")?jsString`. >>>> >>>> Oh, cool! I didn't know we have ?jsString. Perfect. >>>> >>>>> >>>>>>> >>>>>>> Something that would be interesting if the spring.message function can >>>>>>> somehow tell if a message is plain text or HTML. Like you can >>>>>>> configure which messages are HTML on name patterns (or a content >>>>>>> pattern, like all HTML values start with "<span>"). After all, without >>>>>>> such a rule, how do the developers themselves know if a message should >>>>>>> be HTML or plain text. Hopefully the have some exact policy for that. >>>>>>> If spring.message knows that rule too, then for HTML messages it >>>>>>> should return a TemplateMarkupOutputModel instead of a string, so it >>>>>>> will be automatically non-escaped. Then people can just write >>>>>>> ${spring.message("foo")} without worrying about `?noEsc`. And then we >>>>>>> certainly don't need the directive "overload" either. >>>>>> >>>>>> As far as I know, MessageTag extends HtmlEscapingAwareTag which has >>>>>> the following javadoc: >>>>>> >>>>>> * <p>Provides a "htmlEscape" property for explicitly specifying whether >>>>>> to >>>>>> * apply HTML escaping. If not set, a page-level default (e.g. from the >>>>>> * HtmlEscapeTag) or an application-wide default (the "defaultHtmlEscape" >>>>>> * context-param in {@code web.xml}) is used. >>>>> >>>>> So then it seems we indeed need some spring library configuration >>>>> parameter that associates an output format (as in >>>>> http://freemarker.org/docs/dgui_misc_autoescaping.html) to each >>>>> message, based on patterns. By default everything should be just plain >>>>> text, to be on the safe side (i.e., auto-escaping will happen for >>>>> them, because ${} does that). The equivalent of "defaultHtmlEscape" >>>>> being on is that you assoicate "HTML" output format to all messages. >>>> >>>> +1 >>>> >>>>> >>>>> This also reinforces that, at least in the first iteration, >>>>> spring.message should be function only, not a directive. >>>>> `${spring.message("foo")}` isn't more verbose than >>>>> `<@spring.message "foo" />` anyway. >>>> >>>> +1 >>>> >>>>> >>>>> BTW, I think it may worth having a special syntax for message >>>>> insertion in the template language. For example, >>>>> %{label.greet user, today} would be a syntactical sugar for >>>>> ${someframewok.message('label.greet', user, today)}. But that's >>>>> another topic. >>>> >>>> Sounds promising! >>>> >>>> Woonsan >>>> >>>>> >>>>>> Regards, >>>>>> >>>>>> Woonsan >>>>>> >>>>>>> >>>>>>>>> By the way, I'm wondering what the best practices are in naming those >>>>>>>>> models. Should it be better with 'form', 'spring_form', 'spring.form', >>>>>>>>> or something else? Prefixing with something sounds safer to me. >>>>>>>> >>>>>>>> In the templates they should be accessible as <@spring.bind ...> and >>>>>>>> such. In the case of the form tags, as it's in a separate namespace in >>>>>>>> JSP, maybe it should be <@form.input ...> etc. (Though I'm not 100% >>>>>>>> sure if its practical the structure of the JSP taglibs so closely, and >>>>>>> >>>>>>> I meant: "if it's practical to follow the structure of the JSP taglibs >>>>>>> so closely" >>>>>>> >>>>>>>> maybe we could just go with <@spring.input ...>. I don't know.) >>>>>>>> >>>>>>>>> Regards, >>>>>>>>> >>>>>>>>> Woonsan >>>>>>>>> >>>>>>>>> [1] >>>>>>>>> https://docs.spring.io/spring/docs/current/spring-framework-reference/html/spring-tld.html >>>>>>>>> [2] >>>>>>>>> https://docs.spring.io/spring/docs/current/spring-framework-reference/html/spring-form-tld.html >>>>>>>>> >>>>>>>>>> >>>>>>>>>>>> Besides, just to be absolutely clear, I would merge your current >>>>>>>>>>>> PR as >>>>>>>>>>>> well, if it doesn't raise licensing issues, which is of course a >>>>>>>>>>>> blocker. >>>>>>>>>>> >>>>>>>>>>> Sure, no worries. I was also under a concern about that and wanted >>>>>>>>>>> to >>>>>>>>>>> get feedbacks before doing too much. ;-) >>>>>>>>>>> >>>>>>>>>>> Regards, >>>>>>>>>>> >>>>>>>>>>> Woonsan >>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Monday, August 7, 2017, 4:23:26 PM, Woonsan Ko wrote: >>>>>>>>>>>> >>>>>>>>>>>>> On Sun, Aug 6, 2017 at 6:14 AM, Daniel Dekany >>>>>>>>>>>>> <ddek...@freemail.hu> wrote: >>>>>>>>>>>>>> The big problem is that spring.ftl is copyrighted by some of the >>>>>>>>>>>>>> Spring authors (or the Spring project as a whole - it's not >>>>>>>>>>>>>> clear). So >>>>>>>>>>>>>> certainly we can't just copy it. It has to be reimplemented >>>>>>>>>>>>>> without >>>>>>>>>>>>>> looking at the source, or something absurd like that. Perhaps >>>>>>>>>>>>>> the best >>>>>>>>>>>>>> is to start out from the spring JSP taglib, as that's the most >>>>>>>>>>>>>> widely >>>>>>>>>>>>>> used templating solution (I assume), so certainly that's the one >>>>>>>>>>>>>> where >>>>>>>>>>>>>> all the features are exposed. >>>>>>>>>>>>>> >>>>>>>>>>>>>> I wonder if using #import + FTL is the best way of adding >>>>>>>>>>>>>> framework-level functionality that's used by a lot of people. >>>>>>>>>>>>>> It's >>>>>>>>>>>>>> surely an OK way, but it's not the highest performance way. The >>>>>>>>>>>>>> other >>>>>>>>>>>>>> way is using a shared variable (or some other kind of commonly >>>>>>>>>>>>>> visible >>>>>>>>>>>>>> variable) and implement the library in Java using >>>>>>>>>>>>>> TemplateDirectiveModel-s and TemplateFunctionModel-s. It's less >>>>>>>>>>>>>> convenient than doing it in FTL, but it has to be done once, >>>>>>>>>>>>>> while you >>>>>>>>>>>>>> save some resources everywhere where it's used. Though as most of >>>>>>>>>>>>>> these macros/functions are quite simple, I don't think the >>>>>>>>>>>>>> performance >>>>>>>>>>>>>> difference matters much. But, it also avoids the legal issue >>>>>>>>>>>>>> above. I >>>>>>>>>>>>>> mean, many of these function/macros are so trivial, that it's >>>>>>>>>>>>>> hard to >>>>>>>>>>>>>> implement them on a different way in FTL than as it is in the >>>>>>>>>>>>>> Spring >>>>>>>>>>>>>> source code, but if you implement them in Java, then it's much >>>>>>>>>>>>>> harder >>>>>>>>>>>>>> to accuse anyone with stealing. (A minor annoyance right now is >>>>>>>>>>>>>> that >>>>>>>>>>>>>> that part of the FreeMarker API is not yet settled; see >>>>>>>>>>>>>> FREEMARKER-63, >>>>>>>>>>>>>> FREEMARKER-64, FREEMARKER-65. But hopefully it will be in a good >>>>>>>>>>>>>> enough shape soon. And see other thread; input is welcome!) >>>>>>>>>>>>>> >>>>>>>>>>>>>> As of template aliases, at the first glance that's fine. Note >>>>>>>>>>>>>> that >>>>>>>>>>>>>> there's MultiTemplateLoader which does something similar, but I >>>>>>>>>>>>>> assume >>>>>>>>>>>>>> it would be less neat (and/or slower) to do this with that. (But >>>>>>>>>>>>>> if >>>>>>>>>>>>>> the spring functionality won't be #import-ed after all (as >>>>>>>>>>>>>> above), the >>>>>>>>>>>>>> whole thing can become unnecessary...) >>>>>>>>>>>>> >>>>>>>>>>>>> Thank you very much for sharing your insights. Greatly helpful >>>>>>>>>>>>> advice. >>>>>>>>>>>>> I agree that it might be better with template model(s) rather than >>>>>>>>>>>>> library FTL in various aspects. >>>>>>>>>>>>> Let me try with that approach again and let you know soon with a >>>>>>>>>>>>> new PR. >>>>>>>>>>>>> >>>>>>>>>>>>> Thank again, >>>>>>>>>>>>> >>>>>>>>>>>>> Woonsan >>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> Sunday, August 6, 2017, 7:22:00 AM, ASF GitHub Bot (JIRA) wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> [ >>>>>>>>>>>>>>> https://issues.apache.org/jira/browse/FREEMARKER-55?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16115649#comment-16115649 >>>>>>>>>>>>>>> ] >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> ASF GitHub Bot commented on FREEMARKER-55: >>>>>>>>>>>>>>> ------------------------------------------ >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> GitHub user woonsan opened a pull request: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> https://github.com/apache/incubator-freemarker/pull/31 >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> FREEMARKER-55: spring.ftl marco lib support >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> - Support <#import "/spring.ftl" as spring> like Spring >>>>>>>>>>>>>>> Framework does. >>>>>>>>>>>>>>> - By default, the system lib from /spring.ftl is read from >>>>>>>>>>>>>>> the >>>>>>>>>>>>>>> specific classpath, not from app's template path. >>>>>>>>>>>>>>> The system template aliases map can be customized through >>>>>>>>>>>>>>> SpringResourceTemplateLoader.systemTemplateAliases property. >>>>>>>>>>>>>>> - The same macros and functions are defined in /spring.ftl >>>>>>>>>>>>>>> as >>>>>>>>>>>>>>> Spring Framework's, with syntax changes to comply with FM3. >>>>>>>>>>>>>>> - Note: As the system template lib support is handled by >>>>>>>>>>>>>>> SpringTemplateLoader in this PR, it means developers should >>>>>>>>>>>>>>> always >>>>>>>>>>>>>>> use SpringTemplateLoader directly or indirectly in order to use >>>>>>>>>>>>>>> the >>>>>>>>>>>>>>> system macro library. Please review this decision. >>>>>>>>>>>>>>> - TODOs: review/test/refine each macro and functions in >>>>>>>>>>>>>>> spring.ftl. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> You can merge this pull request into a Git repository by >>>>>>>>>>>>>>> running: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> $ git pull https://github.com/woonsan/incubator-freemarker >>>>>>>>>>>>>>> feature/FREEMARKER-55 >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Alternatively you can review and apply these changes as the >>>>>>>>>>>>>>> patch at: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> https://github.com/apache/incubator-freemarker/pull/31.patch >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> To close this pull request, make a commit to your master/trunk >>>>>>>>>>>>>>> branch >>>>>>>>>>>>>>> with (at least) the following in the commit message: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> This closes #31 >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> ---- >>>>>>>>>>>>>>> commit 8e0f33c419d982279d7fb22a9dfdc66f47abaf2c >>>>>>>>>>>>>>> Author: Woonsan Ko <woon...@apache.org> >>>>>>>>>>>>>>> Date: 2017-07-14T15:27:17Z >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> FREEMARKER-55: Renaming Freemarker to FreeMarker >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> commit ec8d687d4ce2c0e1bb3e3ca073b139eacc198527 >>>>>>>>>>>>>>> Author: Woonsan Ko <woon...@apache.org> >>>>>>>>>>>>>>> Date: 2017-07-14T15:53:51Z >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Merge branch '3' into feature/FREEMARKER-55 >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> commit e7cb6f7cfc241689c85527971bf6e1ea7ced9127 >>>>>>>>>>>>>>> Author: Woonsan Ko <woon...@apache.org> >>>>>>>>>>>>>>> Date: 2017-07-14T17:57:29Z >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Merge branch '3' into feature/FREEMARKER-55 >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> commit c6eb09de91e57035c1e0e3c4d3490b3b96622bab >>>>>>>>>>>>>>> Author: Woonsan Ko <woon...@apache.org> >>>>>>>>>>>>>>> Date: 2017-07-16T18:24:55Z >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Merge branch '3' into feature/FREEMARKER-55 >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> commit 870209fa8e0acd0bb3186053dfd549b5c758e37d >>>>>>>>>>>>>>> Author: Woonsan Ko <woon...@apache.org> >>>>>>>>>>>>>>> Date: 2017-07-18T00:38:03Z >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Merge branch '3' into feature/FREEMARKER-55 >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> commit 4481406a2f4eeb30d6d044a4ac158efab7ba7a7b >>>>>>>>>>>>>>> Author: Woonsan Ko <woon...@apache.org> >>>>>>>>>>>>>>> Date: 2017-08-06T01:28:54Z >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Merge branch '3' into feature/FREEMARKER-55 >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> commit fcd9e672ec515e3042bc5efd229b7d12c23e7d88 >>>>>>>>>>>>>>> Author: Woonsan Ko <woon...@apache.org> >>>>>>>>>>>>>>> Date: 2017-08-06T05:09:12Z >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> FREEMARKER-55: system template lib for spring app: >>>>>>>>>>>>>>> spring.ftl. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> ---- >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> FM3 freemarker-spring module, Web MVC support >>>>>>>>>>>>>>>> --------------------------------------------- >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Key: FREEMARKER-55 >>>>>>>>>>>>>>>> URL: >>>>>>>>>>>>>>>> https://issues.apache.org/jira/browse/FREEMARKER-55 >>>>>>>>>>>>>>>> Project: Apache Freemarker >>>>>>>>>>>>>>>> Issue Type: Task >>>>>>>>>>>>>>>> Affects Versions: 3.0.0 >>>>>>>>>>>>>>>> Reporter: Daniel Dekany >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Add Spring "Web MVC framework" functionality to >>>>>>>>>>>>>>>> freemarker-spring. >>>>>>>>>>>>>>>> This can be complex task (and the issue possibly has to be >>>>>>>>>>>>>>>> subdivided), as it involves things like: >>>>>>>>>>>>>>>> * Some aspects of the FreeMarker 2 integration (developed by >>>>>>>>>>>>>>>> the Spring developers) are quite confusing >>>>>>>>>>>>>>>> ({{FreemarerConfigurer}}, etc.), and we are looking into if it >>>>>>>>>>>>>>>> needs to be like that. >>>>>>>>>>>>>>>> * See if we can support {{@EnableWebMvc}} (note that >>>>>>>>>>>>>>>> FreeMarker 2 support is hard coded into >>>>>>>>>>>>>>>> {{ViewResolverRegistry}}, which we can't modify) >>>>>>>>>>>>>>>> * Creating custom directives/methods to expose Spring features >>>>>>>>>>>>>>>> like the Spring JSP Tag Library does (but in a way that firs >>>>>>>>>>>>>>>> FreeMarker better) >>>>>>>>>>>>>>>> * Expose JSP custom tag support from the >>>>>>>>>>>>>>>> {{freemarker-servlet}} module. >>>>>>>>>>>>>>>> Depends on: FREEMARKER-54 >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>> This message was sent by Atlassian JIRA >>>>>>>>>>>>>>> (v6.4.14#64029) >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> -- >>>>>>>>>>>>>> Thanks, >>>>>>>>>>>>>> Daniel Dekany >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> Thanks, >>>>>>>>>>>> Daniel Dekany >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> Thanks, >>>>>>>>>> Daniel Dekany >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Thanks, >>>>>>> Daniel Dekany >>>>>>> >>>>>> >>>>> >>>>> -- >>>>> Thanks, >>>>> Daniel Dekany >>>>> >>> >> >> -- >> Thanks, >> Daniel Dekany >>