Kotlin Details¶
Kotlin entails a few differences. The jte-kotlin
dependency is needed to enable .kte
templates that contain
Kotlin code. Keep in mind that Kotlin application code can use either Java (.jte
) or Kotlin (.kte
) templates. .kte
files are only needed for Kotlin based templates.
Add required dependencies¶
This dependency is a compile time dependency to avoid including the Kotlin compiler in the resulting build.
Common errors¶
Non-null parameters¶
If a non-null parameter exists in the template, the template will fail to load with an error in the line where the parameter is being included.
Error rendering template:
Failed to render admin/index.kte, error at admin/index.kte:1
(many many lines of stack trace)
Caused by: java.lang.NullPointerException: null cannot be cast to non-null type kotlin.String
Writing a non-supported type to a template¶
This will generate an error like so:
gg.jte.TemplateException: Failed to compile template, error at myPage/index.kte:3
jteOutput.writeUserContent(things)
/Users/aUser/app/jte-classes/gg/jte/generated/ondemand/index/JteindexGenerated.kt:13:14
Reason: None of the following functions can be called with the arguments supplied:
public open fun writeUserContent(p0: Content!): Unit defined in gg.jte.html.HtmlTemplateOutput
public open fun writeUserContent(p0: Boolean): Unit defined in gg.jte.html.HtmlTemplateOutput
(etc.)
This will be improved in the future.
Nulls in @for
expressions¶
@for
loops use an iterator. If a variable is null then the following error will appear:
Failed to compile template, error at myApp/index.kte:5
for (s in things) {
/Users/aUser/code/cds/jte-classes/gg/jte/generated/ondemand/index/JteindexGenerated.kt:10:13
Reason: Not nullable value required to call an 'iterator()' method on for-loop range
A quick fix is to make the parameter have an empty list by default.