【问题标题】:Using Ajax with Spring Portlet将 Ajax 与 Spring Portlet 一起使用
【发布时间】:2013-09-09 10:38:43
【问题描述】:

我正在尝试将 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()));
}

【问题讨论】:

    标签: java ajax spring spring-portlet-mvc


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 是的,我忘了说我已经尝试过了,得到了你提到的结果。同样奇怪的是,它似乎真的返回到整个页面,但没有我最初想要获得的实际 date 属性
    • 我知道当我测试它时,我看到嵌入到 messageText 的页面内容上的日期
    猜你喜欢
    • 1970-01-01
    • 2016-10-31
    • 2011-09-03
    • 2015-11-24
    • 2014-06-03
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多