gpt4 book ai didi

java - 将 Ajax 与 Spring Portlet 结合使用

转载 作者:行者123 更新时间:2023-12-01 14:08:47 24 4
gpt4 key购买 nike

我正在尝试将 Ajax 与 Spring Portlet 2.5 结合使用(我无法升级到更高版本,因为我需要对此运行测试 - 因此我无法使用 @ResourceMapping)。这就是我尝试过的

<script type='text/javascript'>
function <portlet:namespace />setCurrentDateTime() {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
//now what?
}
};
xhr.open("GET", '${actionURL}', true);
xhr.send();
}
</script>

<table>
<tr>
<td><b><a href="# "onclick="<portlet:namespace />setCurrentDateTime();" style="color: black;" id="refreshLink">Refresh</a></b></td>
</tr>
</table>
<br/>
<div id="<portlet:namespace />messageText">${date}</div>

通过此代码,可以正确触发服务器端的操作,但我不确定如何刷新 messageText 以从服务器获取更新的值。

这是我的服务器端代码

@RequestMapping
public ModelAndView defaultView(RenderRequest request, RenderResponse response) {
String date = (String) request.getPortletSession().getAttribute("date");
if (date == null) {
return new ModelAndView("home");
} else {
Map<String, Object> map = new HashMap<String, Object>();
map.put("date", date);
return new ModelAndView("home", map);
}
}

@RequestMapping(params = "action=getDateTime")
public void handleActionRequest(ActionRequest ar, ActionResponse ar1) {
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
ar.getPortletSession().setAttribute("date", sdf.format(new Date()));
}

最佳答案

更新 messageText 元素的内容需要将以下内容添加到您当前“现在做什么?”的 JavaScript 中:

document.getElementById("<portlet:namespace />messageText").innerHTML = xhr.responseText;

但是,更大的问题是您尝试在带有仅支持JSR 168(Portlet Spec 1.0)的 Spring 版本的 portlet 中使用 Ajax。 资源请求是 Ajax 调用的典型处理方式,直到 JSR 286(Portlet 规范 2.0)才引入。

使用我建议的代码更新 JavaScript 会导致整个门户页面被添加为 messageText 元素的 innerHTML,因为 ActionRequest 会触发完整的 RenderRequest对于 portlet。

关于java - 将 Ajax 与 Spring Portlet 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18696365/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com