使用JSTL访问模型对象

时间:2012-05-08 20:10:51

标签: java ajax spring jstl

我目前正试图掌握AJAX,并且在访问模型对象时遇到问题。

我的测试代码所做的是从下拉列表中获取所选内容的值,当按下按钮时,它会将此值传递给AjaxTest(),这会将参数附加到模型,但我不能似乎输出模型对象 - 我想知道为什么会这样?

param肯定有价值。

<div id="result"></div>

<script type="text/javascript">

    var param = document.getElementById("blah").value;

    var loadUrl = "/ajax/" + param;  
    $("#button").click(function(){  

        $.post(loadUrl, function(data){
            alert("Data Loaded: " + data);
            $("#result").html("<p>Param: ${output}</p>"); 
        });
    });  
</script>


@RequestMapping(value = "/ajax/{param}", method = RequestMethod.POST)
public @ResponseBody String AjaxTest(@PathVariable String param, final ModelMap model){

    model.addAttribute("output", param);
    return param;
}

2 个答案:

答案 0 :(得分:2)

我认为你对客户端和服务器端有点混淆了。 你看起来java是正确的,但你的js试图访问jstl表达式($ {output})。呈现页面时jstl表达式将无法解析,这将在Ajax请求/响应发生之前解析。

你的js需要使用变量'data',这是你的java添加到模型的数据。像这样:

$("#result).html("<p>Param: " + data.output + "</p>");

这假定模型是json 希望这有帮助

答案 1 :(得分:1)

首次加载页面时,JSP代码会执行。此代码包含以下行:

$("#button").click(function(){  

    $.post(loadUrl, function(data){
        alert("Data Loaded: " + data);
        $("#result").html("<p>Param: ${output}</p>"); 
    });
});

因此,JSP EL代码由容器解释,$ {output}由output属性的值替换。由于此属性为null,因此会生成以下HTML代码并将其发送到浏览器:

$("#button").click(function(){  

    $.post(loadUrl, function(data){
        alert("Data Loaded: " + data);
        $("#result").html("<p>Param: </p>"); 
    });
});

单击按钮时,将执行上述JavaScript代码。它向ajax URL发送一个AJAX请求,当响应返回时,它执行回调函数:

alert("Data Loaded: " + data);
$("#result").html("<p>Param: </p>");

因此,从服务器收到的数据显示在警告框中,然后由“{”标识的HTML元素的内容被<p>Param: </p>替换。

相关问题