簡體   English   中英

在Freemarker模板的Javascript中運行Java方法

[英]Run Java method in Javascript in Freemarker template

我想在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> 

EDIT1:

我也在嘗試這樣的事情:

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

但無法通過onclick觸發活動。

EDIT2:

我已經快找到解決方案了。 以下代碼執行Java方法,我只需要弄清楚如何引用“變量”以將javasript值加載到其中。

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

以下是Apache FreeMarker項目首頁的引文:( https://freemarker.apache.org/

什么是Apache FreeMarker™?

Apache FreeMarker™是一個模板引擎:一個Java庫,用於根據模板和不斷變化的數據生成文本輸出(HTML網頁,電子郵件,配置文件,源代碼等)。 模板使用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函數進行通訊的唯一方法是通過對Java-Servlet或老式JSP PageHTTP GET / POST調用。 盡管它在網站的頂級域名頁面上說了“明確”,“ Freemarker並沒有綁定到Servlet”,這實際上意味着軟件類/軟件包根本不必在網絡環境中運行-也許在沒有網絡瀏覽器的台式計算機上。

我確實非常肯定地知道,客戶端(在Web瀏覽器上)與服務器(在Web服務器上)之間的通信始終通過HTTP GET / POST請求完成。 JSON,AJAX通常用於更高級別的通信大量數據。 如果希望JavaScript方法在后端調用Java類,則需要包括一個Servlet或JSP類-以及整個9碼的啟動路徑。

注意:我沒有使用過Apache FreeMarker,但是整天都在編寫Java / JavaScript。 據此判斷! 根據Apache網站的說法,FreeMarker有助於“以編程方式或自動生成頁面的HTML”(這是C#擅長的)-實際上,我經常在我的網站上這樣做,但是( !)我不使用Apache的產品。 這意味着FreeMarker可以使用后端服務器端的Java類幫助更有效地生成HTML。

但是Java和Java腳本如何通信的規則沒有改變...

長話短說-您必須包含JavaScript調用,例如:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM