Spring MVC示例中的“Hello World”是从哪里来的?

3

我正在尝试从Git中查看Spring Show Case的代码

https://github.com/SpringSource/spring-mvc-showcase

如果您点击简单链接,第一页上会缺少一些内容,您将会看到绿色的“Hello World”。因此,我查看了JSP页面并找到了以下代码:
<ul>
            <li>
                <a id="simpleLink" class="textLink" href="<c:url value="/simple" />">GET /simple</a>
            </li>
            <li>
                <a id="simpleRevisited" class="textLink" href="<c:url value="/simple/revisited" />">GET /simple/revisited</a>
            </li>
        </ul>

我不知道控制器的调用在哪里,但我不明白JSP页面如何知道将“Hello World”放在绿色位置。

然后我审查了控制器,发现:

@Controller
public class SimpleController {

    @RequestMapping("/simple")
    public @ResponseBody String simple() {
        return "Hello world!";
    }

}

这段代码向JSP发送了"Hello World",但是JSP如何知道在哪里插入它呢?我看不到任何标签。

1个回答

4
似乎魔法正在JSP code底部的jQuery中发生。这对于Hello World教程来说有点复杂,但这并不是重点。
单击链接时,使用AJAX从服务器请求数据:
$("a.textLink").click(function(){
    var link = $(this);
    $.ajax({ url: link.attr("href"), dataType: "text", success: function(text) { MvcUtil.showSuccessResponse(text, link); }, error: function(xhr) { MvcUtil.showErrorResponse(xhr.responseText, link); }});
    return false;
});

最终,通过JavaScript方法,您会到达这段代码,该代码设置响应元素并在页面上显示“Hello World”消息。
MvcUtil.showResponse = function(type, text, element) {
    var responseElementId = element.attr("id") + "Response";
    var responseElement = $("#" + responseElementId);
    if (responseElement.length == 0) {
        responseElement = $('<span id="' + responseElementId + '" class="' + type + '" style="display:none">' + text + '</span>').insertAfter(element);
    } else {
        responseElement.replaceWith('<span id="' + responseElementId + '" class="' + type + '" style="display:none">' + text + '</span>');
    responseElement = $("#" + responseElementId);
    }
    responseElement.fadeIn("slow");
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接