我有一个html页面和一个带有Thymeleaf模板引擎的java应用程序,我正在寻找一个教程,向服务器发出请求,并根据响应仅呈现页面的一部分。
此时,我有一些按钮具有相同页面的链接,带有不同的参数,我的div是基于属性文章列表创建的(我从服务器接收基于button_id)
超文本标记语言:
<a href="/index?button_id=1"> button 1 </a>
<a href="/index?button_id=2"> button 2 </a>
<div class="" th:each="article : ${articleList}">
<p th:text="${article.getText()}">Article</p>
Java:
public class NodController implements IGTVGController {
public void process(
final HttpServletRequest request, final HttpServletResponse response,
final ServletContext servletContext, final TemplateEngine templateEngine)
throws Exception {
final WebContext ctx = new WebContext(request, response, servletContext, request.getLocale());
Integer button_id = Integer.valueOf(request.getParameter("button_id"));
List<String> articleList = getArticleList(button_id);
request.getSession().setAttribute("articleList",articleList);
templateEngine.process("/index", ctx, response.getWriter());
}
我希望我的按钮处理我的索引控制器,只更改文章的div,而不是刷新整个页面。
我尝试过使用ajax,但是我没有找到我能理解的服务器端代码示例,所以我不知道如何处理请求,也不知道如何使用servlet。我也没有设法向我当前的控制器发送任何请求。
我还在thymeleaf api中发现了这种方法:
public final void process(String templateName, IContext context,
IFragmentSpec fragmentSpec, Writer writer)
IFragmentSpec应该“选择要处理的模板片段(一旦读取和解析),丢弃模板的其余部分”,但我找不到关于它的更多信息,比如如何使用它,或者它是否是我正在寻找的。
您必须使用AJAX从服务器动态加载内容。
>
考虑将您的前端设计为SPA。查看AngularJS或Knockout。
此外,如果这只是应用程序的一小部分,则可以使用类似jQuery AJAX的老式方法。
我强烈建议考虑通过使用服务器作为REST服务和前端作为客户端来分离关注点。如果您想保持大型应用程序的可维护性和可扩展性,这是最佳做法。
您应该寻找如何使用服务器端技术实现REST的教程。这是很常见的做法,所以我认为你应该能够找到一个。
如果你有任何问题,我很乐意更新这个答案。
这是javascript代码
//get text 1 by ajax
function getText1(urlstarted) {
xmlHttp = false;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
xmlHttp = new XMLHttpRequest();
if (xmlHttp.overrideMimeType) {
// set type accordingly to anticipated content type
//http_request.overrideMimeType('text/xml');
xmlHttp.overrideMimeType('text/html');
}
} else if (window.ActiveXObject) { // IE
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!xmlHttp) {
alert('Cannot create XMLHTTP instance');
return false;
}
var url=urlstarted+"/jsp/viewText1.jsp"; //put the link to ur Ajax page here
xmlHttp.onreadystatechange = startAjaxingText;
xmlHttp.open("GET", url, true);
xmlHttp.send(null);
}
function startAjaxingText() {
if (xmlHttp.readyState != 4) {
document.getElementById('image').style.display='block' ;
document.getElementById('result').style.display='none' ;
}
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
document.getElementById('image').style.display='none' ;
document.getElementById('result').style.display='block';
document.getElementById('result').innerHTML = xmlHttp.responseText;
} else {
alert("There was a problem with the request.");
}
}
}
//get text 2 by ajax
function getText2(urlstarted) {
xmlHttp = false;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
xmlHttp = new XMLHttpRequest();
if (xmlHttp.overrideMimeType) {
// set type accordingly to anticipated content type
//http_request.overrideMimeType('text/xml');
xmlHttp.overrideMimeType('text/html');
}
} else if (window.ActiveXObject) { // IE
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!xmlHttp) {
alert('Cannot create XMLHTTP instance');
return false;
}
var url=urlstarted+"/jsp/viewText2.jsp"; //put the link to ur Ajax page here
xmlHttp.onreadystatechange = startAjaxingText2;
xmlHttp.open("GET", url, true);
xmlHttp.send(null);
}
function startAjaxingText2() {
if (xmlHttp.readyState != 4) {
document.getElementById('image').style.display='block' ;
document.getElementById('result').style.display='none' ;
}
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
document.getElementById('image').style.display='none' ;
document.getElementById('result').style.display='block';
document.getElementById('result').innerHTML = xmlHttp.responseText;
} else {
alert("There was a problem with the request.");
}
}
}
现在你的扣子会像这样
<input name="button_1" id="button_1" type="button" value="button_1" onclick="getText1('<%=request.getContextPath()%>');" />
<input name="button_2" id="button_2" type="button" value="button_2"
onclick="getText2('<%=request.getContextPath()%>');" />
你的div看起来像
<div id="image" style="display:none"><img src="<%= request.getContextPath()%>/images/ajax-loader.gif" alt="Loading...."/> </div>
<div id="result" style="display:none"></div></td>
你的viewText1.jsp页面,做ajax部分
out.println("text1");//or any logic u want
您的视图文本2。做ajax部分的jsp页面
out.println("text2");//or any logic u want
注意:viewText1的结果。jsp或viewText2。jsp必须是文本,可以是表,也可以是段落
问题内容: 这有可能吗? 这是问题所在: 我有一个使用此URL的关键字搜索(搜索后):http:// localhost / thi / search?keyword = key 然后我有一个使用AjaxForm插件(jquery)的滑块搜索… 当我执行滑块搜索时,显然我仍然会在关键字搜索URL中(因为请求是通过ajax发送的) 有没有办法将当前网址更改为类似http:// localhost /
问题内容: 我从数据库获取数据并将其显示在div中…我要做的是单击链接时应更改div的内容 一种选择是通过URL将参数传递给自身并重新加载页面… 我需要这样做而 无需重新加载\刷新 … 目的是当我单击任何链接时,div和php变量的内容无需刷新即可更新....这样 用户可以看到新数据 ,然后如果执行某些查询,它将在新变量上 ps我知道它将需要一些AJAX,但我不知道AJAX ..所以请以我可以学习
问题内容: 我有一个附加到Java程序的基本html文件。每当刷新页面时,此java程序都会更新HTML文件的部分内容。我只希望在每个时间间隔后刷新页面的该部分。我可以将要刷新的部分放在中,但是我不确定如何仅刷新该内容。任何帮助,将不胜感激。谢谢。 问题答案: 为此使用Ajax。 构建一个函数,该函数将通过ajax获取当前页面,而不是整个页面,仅从服务器中获取有问题的div。然后(再次通过jQue
问题内容: 我有一个文件,其中我在页面顶部显示外部页面(使用iframe),其他部分是写在文件中的html代码的输出。 HTML代码如下所示: 现在,我想以编程方式刷新页面而不刷新。 我的问题是我可以不刷新页面就刷新页面吗? 答案/提示将不胜感激。 问题答案: 该嵌在主HMTL页面(或在JSP)。因此,如果刷新页面,则肯定会再次加载iframe。 为了避免这种情况,我可以考虑以下两种选择: 使用A
我有一个php网站,它必须以分页格式在页面上显示项目列表,我使用php实现了这一点,但现在我想在其中添加ajax功能,所以我添加了这个函数,在分页部分单击page no时调用。Ajax/jQuery函数:(.paginate是页面链接的类) 我的分页功能有点像这样: 在我想要显示分页的div的页面上,我得到的是整个页面作为响应,而不是分页的div。我已经将分页的div分离到一个单独的页面,并将其包
问题内容: 我知道我们可以通过定期轮询更改来做到这一点。这可以通过AJAX(例如与一起使用)来实现。 但是我想知道还有其他方法可以做到这一点吗?其他成本更低或更有效的方法?出色的聊天客户端遵循什么逻辑?一旦您开始键入,另一端就会知道您正在键入。 我们在stackoverflow上遵循什么机制来更新upvote计数或显示已进行编辑等操作,而无需刷新页面? 问题答案: 当要使客户端和服务器保持实时(近