在ftl界面发送ajax到后端,ftl利用freemaker获取属性数据渲染到前端页面
来源:4-1 Freemarker与Servlet整合
慕少1565072
2020-03-04 21:58:17
视频中是直接访问的fm-web/list 即,直接访问servelt页面。我现在有个需求是直接访问ftl,在ftl文件中利用Jquery 发送到 后端servlet中,再由由ajax接收后端发送的数据,由freemaker通过获取后端设置的属性,写到ftl页面内显示。我的问题是ajax由于不会刷新页面,后端设置的属性(无论是requets,session还是context三种登记属性),在ftl中不刷新,就获取不了。不要问我为什么不用js直接渲染,我只是想用用freemaker,明白他的实际使用场景。想问问解决方案是什么?
====源码===
//employee.ftl
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
2333
${salary!"不存在"}
<p id="name"></p>
<input type="button" value="点击发送ajax数据">
<script type="text/javascript" src="js/jquery-3.4.1.js"></script>
<script>
function send2BackEnd(){
$.ajax({
"url":"/Freemaker/list",
"type":"get",
"data":{"name":"xiaoli"},
"dataType":"text",
"success":function(text){
console.log(text);
$("#name").text(text);
}
});
}
$("input").on("click",function(){
send2BackEnd();
});
</script>
</body>
</html>//FreemakerTest.java
package com.imooc.freemaker;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class FreemakerTest
*/
@WebServlet("/list")
public class FreemakerTest extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public FreemakerTest() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setAttribute("salary", "8000");
String name = request.getParameter("name");
//response.getWriter().println(name);
request.getRequestDispatcher("/employee.ftl").forward(request, response);
}
}希望能够尽快解答,非常感谢!!!
1回答
好帮手慕小尤
2020-03-05
同学你好,首先,我们这个ftl文件肯定是要去请求后端,返回数据的,否则就无法显示。其次,老师理解的同学的意思是不是,现在你只能去手动触发使其去发送ajax请求,你想要的是一加载这个页面,ajax就主动去像后端发起请求呢?如果是,同学按照下边这个方法试试,老师把同学的手动提交事件改成了load,代码如下所示:可以使页面加载到这里的时候就去触发。如果老师没有理解对同学的意思,请同学再次详细描述一下。如果同学想要不访问后端而直接显示,是做不到的。
function send2BackEnd(){
$.ajax({
"url":"/fm-web/FreemakerTest",
"type":"get",
"data":{"name":"xiaoli"},
"dataType":"text",
"success":function(text){
console.log(text);
$("#name").text(text);
}
});
}
$(window).on("load",function(){
send2BackEnd();
});如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
相似问题