1

onchange下拉列表中的事件上,我调用了一个 JavaScript 方法。在这个 JavaScript 方法中,我使用 URL 标签调用了一个动作类,这个 URL 也通过一个参数来携带值。但是当我这样做时,我总是会为
动作类的 setter/getter 方法得到一个空值。

我的代码是:setbusiness()从下拉列表的事件中调用javascript内部的方法onchange并将值传递给它。警报消息带有 id 值。但是当xmlhttp.open("GET",url,true)调用动作类时,会使用具有空值的 setter 方法调用动作类。我不明白为什么价值没有到来。请帮助我如何为 URL 的参数分配动态值。

<script>  
function setbusiness(sourceid) {  
alert(" sourceid "+sourceid);
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv1").innerHTML=xmlhttp.responseText;
}
}
var url = "<c:url action="feedajax.action">
<c:param name="sourceid">"%{sid}"</c:param></c:url>";                
xmlhttp.open("GET",url,true);
xmlhttp.send();
} 
</script>    

    
4

1 回答 1

1
var url = "<c:url action="feedajax.action"><c:param name="sourceid">"%{sid}"</c:param></c:url>";                

您在 JSP 中间使用了 OGNL 转义。JSP 对 OGNL 一无所知。您还试图在没有 a+的情况下连接两个字符串,因此语法无论如何都会失败。

由于 S2 的请求包装器,您可以使用普通的 JSP EL:

var url = "<c:url action="feedajax.action"><c:param name="sourceid">${sid}</c:param></c:url>";                

OGNL 表达式仅在了解 OGNL 的内容(如 S2 标签)中有效。

虽然这不是问题,但 IMO 为您的 JS 字符串和 JSTL 参数使用相同的引号使得阅读源代码变得非常困难——IMO 区分两者更清晰:

var url = '<c:url action="feedajax.action"><c:param name="sourceid">${sid}</c:param></c:url>';

更好的是,不要将这两个操作混为一谈,而是使用<c:param>'svalue属性:

<c:url var="feedUrl" action="feedajax.action">
  <c:param name="sourceid" value="${sid}"/>
</c:url>

var url = '${feedUrl}';

警告如果源 ID 是可以由用户传入的东西,它应该是 JS 转义的。

于 2012-06-26T12:20:14.763 回答