Thanks to all for your feedback. Am Mi., 20. Sept. 2023 um 16:57 Uhr schrieb Daniel Dekany < daniel.dek...@gmail.com>:
> Ah, missed the replies of others earlier. So, I think, in case of > ${existingVar + missingVar}, we could re-print ${existingVar + missingVar} > as is. And then, if existingVar is not there for the 2nd phase processing, > then bad luck... > > On Wed, Sep 20, 2023 at 8:53 AM Daniel Dekany <daniel.dek...@gmail.com> > wrote: > > > So that means that if an ${...} throws InvalidReferenceException, the > > TemplateExceptionHandler (see Configuration.setTemplateExceptionHandler) > > should suppress the exception, and print the source code quotation of the > > interpolation. The last is currently not supported, but maybe not that > hard > > to add. > Like, maybe, the TemplateException that we handle could provide the > > quotation. > Although we now followed a different path and discarded the initial 2-phase rendering idea, I like your idea for something else - if I interpret your sentence correctly. Having the "source quotation in the TemplateException" may allow us to provide better custom error messages. Don't get me wrong: the error messages of FM are often quite good and detailed, but having access to the source code quotation would allow us to create our own error messages with words more suitable to our application in some cases. > > > > What if you have ${existingVar + missingVar}? > > > > A further complication... what if the problem is in a directive, like > > <#if variableB = 'x'>. I think then we have to fail the template, as we > > can't decide if the inside of the #if had to be executed now, or not. > Same > > problem with custom directives. > > > > On Mon, Sep 18, 2023 at 6:03 PM Christoph Rüger <c.rue...@synesty.com> > > wrote: > > > >> Hi, > >> we may have a rather special case and are looking for ideas. > >> We would like to to keep the placeholders as they are in case of null > >> values. > >> > >> Assume the following template: > >> > >> ${metaHeaderDataA} > >> ${variableB} > >> > >> We would like the following behavior: > >> > >> *1st render phase:* > >> data.put("metaHeaderDataA", "foo") > >> environment.process(template); > >> > >> Expected Output: > >> foo > >> ${variableB} > >> > >> The we want to render this output again with: > >> > >> *2nd render phase:* > >> data.put("variableB", "bar") > >> environment.process(template); > >> > >> Expected final Output: > >> foo > >> bar > >> > >> As you see there 2 two rendering phases involved. In phase 1 only some > >> variables are known (metaHeaderDataA). > >> The other variables come later. > >> We would like keep the placeholders in the 1st rendering phase, if there > >> is > >> no value or null value in the data model, so that they can be rendered > >> later. > >> > >> I think this is very special. > >> So I am just thinking, is this something which could (theoretically) > be a > >> configurable option maybe on a per-Template-object level (Java Code)? Or > >> is > >> this something impossible to do? > >> > >> Or any other workaround ideas? > >> > >> > >> Thanks > >> Christoph > >> > >> -- > >> Synesty GmbH > >> Berggasse 1 > >> 07745 Jena > >> Tel.: +49 3641 5596493Internet: > >> https://synesty.com <https://synesty.com> > >> Informationen zum Datenschutz: > >> https://synesty.com/datenschutz <https://synesty.com/datenschutz> > >> > >> Geschäftsführer: Christoph Rüger > >> Unternehmenssitz: Jena > >> Handelsregister B > >> beim Amtsgericht: Jena > >> Handelsregister-Nummer: HRB 508766 > >> Ust-IdNr.: > >> DE287564982 > >> > > > > > > -- > > Best regards, > > Daniel Dekany > > > > > -- > Best regards, > Daniel Dekany > -- Christoph Rüger, Geschäftsführer Synesty <https://synesty.com/> - Anbinden und Automatisieren ohne Programmieren -- Synesty GmbH Berggasse 1 07745 Jena Tel.: +49 3641 5596493Internet: https://synesty.com <https://synesty.com> Informationen zum Datenschutz: https://synesty.com/datenschutz <https://synesty.com/datenschutz> Geschäftsführer: Christoph Rüger Unternehmenssitz: Jena Handelsregister B beim Amtsgericht: Jena Handelsregister-Nummer: HRB 508766 Ust-IdNr.: DE287564982