尝试对 java 脚本中的 java 变量使用 .get 方法

Attempting to use .get method on java variable in javascript

我正在尝试创建一个网页(使用播放框架)来显示用户的姓名、出生日期等。我被卡住的地方是试图在 [=22= 中显示未知大小的列表] 页。我目前有:

@(currentUser : Profile)

@main("Profile") {
    <div>
        <h1><b>@currentUser.getFirstName() @currentUser.getLastName()</b></h1>
        <p>@currentUser.getDateofBirth</p>
        <b>Nationalities</b>
        <ul><p id="natInput"></p></ul>
        <script>
            for (var i = 0; i < "@currentUser.getNationalities().size()"; i++) {
                document.getElementById("natInput").innerHTML += "<li>" + "@currentUser.getNationalities().get(i)" + "</li>";
            }
        </script>
    </div>
}

Profile 是一个基本的 java class,它只包含 getter 和 setter,而 .getNationalities returns 是一个列表。 @Main 是另一个 html 文件,它存储网站的基本设计,与此无关。

如您所见,我正在尝试使用 .get 方法循环遍历用户的国籍列表,但不幸的是,无法识别 get 中使用的 "i" 变量,因为它是 html 中的 java 脚本变量。 此代码的每个其他部分似乎都按预期工作,并且当 "i" 被替换为整数(例如 0 或 1)时 .get 工作。

关于如何获取此列表的每个单独元素的任何想法?任何帮助将不胜感激

问题是您搞乱了页面生成的不同步骤。

首先,我们应该清除从 Play 控制器中的 render 命令到浏览器中完全呈现的页面的处理步骤。

Twirl 是一个模板引擎,可让您使用 Scala 生成 HTML 页面。 此步骤在服务器端执行,在 HTML 页面发送到浏览器之前。 在此步骤中,不考虑 Javascript 代码。

所以在 render 命令之后的第一步,选择并渲染旋转模板,评估每个 Twirl/Scala 指令。这将生成一个没有更多 Scala 代码的 HTML 文件。

这个生成的页面被发送到浏览器。然后页面被加载到浏览器中,Javascript 代码被评估为任何其他带有 JS 的 HTML 页面。


这可以解释为什么您无法按照您现在的方式呈现页面。

如果您的页面是静态的,一种正确的方法是仅使用旋转指令来遍历数组 Twirl Template - Iterating

如果 getNationalities() 方法 returns a Scala List

,您应该能够像下面这样重写列表生成
<ul>
@for(nationality <- currentUser.getNationalities()) {
   <li>@nationality</li>
}
</ul>