kotlin Android上的简单Ktor + ThymeLeaf服务器在使用ThymeLeaf变量属性时不会呈现页面

ncecgwcz  于 2023-01-17  发布在  Kotlin
关注(0)|答案(1)|浏览(123)

我试图创建简单的Android应用程序使用ktor作为设备上的服务器.
我已经设法在我的android项目中为ktor 1.6.8添加了dependecies,我也试着按照我管理的文档来托管和渲染非常基本的html页面,但是当我尝试使用thymeleaf的模型数据属性时,我遇到了一些奇怪的问题-页面根本不渲染。
即:

<html xmlns:th="http://www.thymeleaf.org">
<body>
<h1 th:text="'Hello, ' + ${user}"></h1>
</body>
</html>

这将渲染Hello, ThymeleafUser(id=1, name=Scott),但将更改为:

<html xmlns:th="http://www.thymeleaf.org">
<body>
<h1 th:text="'Hello, ' + ${user.name}"></h1>
</body>
</html>

根本不呈现页面(而是呈现预期的Hello, Scott
服务器的代码或多或少取自ktor generator,我将其放入单个kotlin类中:

package com.example.testapp

import io.ktor.application.*
import io.ktor.response.*
import io.ktor.routing.*
import io.ktor.server.engine.*
import io.ktor.server.netty.*
import io.ktor.thymeleaf.*
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver
import kotlin.concurrent.thread

class Server {
    companion object {
        fun startServer(){
            thread(start=true) {
                embeddedServer(Netty, host = "0.0.0.0", port = 12345) {
                    install(Thymeleaf){
                        setTemplateResolver(ClassLoaderTemplateResolver().apply {
                            prefix = "templates/"
                            suffix = ".html"
                            characterEncoding = "utf-8"
                        })
                    }
                    routing {
                        get("/html-thymeleaf") {
                            val sampleUser = ThymeleafUser(1, "Scott")
                            call.respond(ThymeleafContent("index", mapOf("user" to sampleUser)))
                        }

                    }
                }.start(wait = true)
            }
        }
    }
}
data class ThymeleafUser(val id: Int, val name: String)

Server.startServer()在Andorid主活动onCreate方法中调用。
我的问题是:为什么会出现这种情况?为什么我无法访问示例中或github上显示的"用户"属性。
也许这只是一个菜鸟问题,但我没有看到任何日志,任何堆栈跟踪,没有任何指导我如何解决这个问题。

7cwmlq89

7cwmlq891#

不幸的是,为了计算${user.name}这样的表达式,Thymeleaf使用了java.beans包中的类,而这些类在Android上是不可用的。

相关问题