[英]Calling Java class's method from javascript in a freemarker template
[英]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 Page的HTTP 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.