首页 > 解决方案 > 在 Freemarker 模板中用 Javascript 运行 Java 方法

问题描述

我想在 Freemaker 模板中但在 Javascript 中对我的 Java 对象运行方法。也可以直接在 Freemarker 中,但我需要在点击时运行它。

我有以下方法无法运行的问题:

actual_id.setActual_id(variable) ;

我有以下Java代码:

Setting actual_id= new Setting("-");

Map<String, Object> data = new HashMap<>();
data.put("items", items);
data.put("actual_id", actual_id);

public Setting(String actual_id) {
    this.actual_id = actual_id;
}

public String getActual_id() {
    return actual_id;
}

public void setActual_id(String actual_id) {
    this.actual_id = actual_id;
}

这是我的 Freemaker 模板:

<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<script>function myFunction(variable) {
alert(variable);
actual_id.setActual_id(variable) ;
location.reload();}
</script>

<#list items as item>
<p>${item.name}: ${item.id} <button type="button" id="${item.id}" onclick=myFunction("${item.id}") >Details</button>
    </#list> 

编辑1:

我也在尝试这样的事情:

onclick="${actual_id.setActual_id(item.id)}"

但不能从 onclick 触发活动。

编辑2:

我已经几乎找到了解决方案。以下代码执行 Java 方法,我只需要弄清楚如何引用“变量”来将 javasript 值加载到其中。

function myFunction(variable) {
    alert(variable);
    var idd ="${actual_id.setActual_id(variable)}";//here variable value needed
    alert(idd);
    location.reload();
}

标签: javascriptjavahtmlfreemarker

解决方案


这是Apache FreeMarker项目首页的引述:( https://freemarker.apache.org/ )

什么是 Apache FreeMarker™?

Apache FreeMarker™ 是一个模板引擎:一个基于模板和不断变化的数据生成文本输出(HTML 网页、电子邮件、配置文件、源代码等)的 Java 库。模板是用 FreeMarker 模板语言 (FTL) 编写的,它是一种简单的专用语言(不是 PHP 等成熟的编程语言)。通常,使用通用编程语言(如 Java)来准备数据(发出数据库查询、进行业务计算)。然后,Apache FreeMarker 使用模板显示准备好的数据。在模板中,您专注于如何呈现数据,而在模板之外,您专注于呈现哪些数据。

图 [照片/图片未发布]

这种方法通常被称为 MVC(模型视图控制器)模式,特别适用于动态网页。它有助于将网页设计者(HTML 作者)与开发者(通常是 Java 程序员)分开。设计人员不会面对模板中的复杂逻辑,并且可以更改页面的外观,而无需程序员更改或重新编译代码。

虽然 FreeMarker 最初是为在 MVC Web 应用程序框架中生成 HTML 页面而创建的,但**它不绑定到 servlet 或 HTML 或任何与 Web 相关的东西。**它也用于非 Web 应用程序环境。

https://freemarker.apache.org/

我自己整天都在 Google Cloud Server 上编写 Java 和 JavaScript 网络服务器。 使 JavaScript 函数与 Java 函数对话的唯一方法是通过HTTP GET / POST调用Java-Servlet或老式的JSP Page。虽然它在网站的顶级域页面上说(明确)“Freemarker 不绑定到 Servlets”——这实际上意味着软件类/包根本不必在网络环境中运行——也许在没有网络浏览器的台式计算机上。

我非常确定的是,客户端(在网络浏览器上)和服务器(网络服务器)之间的通信总是通过 HTTP GET / POST 请求完成的。JSON、AJAX 常见于更高级别的大量数据通信。如果您希望 JavaScript 方法在后端调用 Java 类,则需要包含一个 Servlet 或 JSP 类 - 以及整个 9 码的引导。

注意:我没有使用过 Apache FreeMarker,但我整天都在编写 Java/JavaScript。相应地判断!根据 Apache 网站,FreeMarker 有助于“以编程方式或自动生成页面的 HTML”(这是 C# 擅长的)——这实际上是我经常为我的网站做的事情,但是(唉!)我不使用Apache的产品。这意味着 FreeMarker 可以帮助在后端服务器端使用 Java 类更有效地生成 HTML ...

但是 Java 和 Java-Script 通信的规则并没有改变……

长话短说 - 您必须包含 JavaScript 调用,例如:


推荐阅读