在SSH框架下实现jsp页面的局部刷新(ajax)
第一种方法:
jsp中代码为
<a onclick="loadXMLDoc('ajax/my.jsp')"></a>
对应的js:
<script type="text/javascript">
var xmlhttp;
function loadXMLDoc(url)
{
xmlhttp=null;
if (window.XMLHttpRequest)
{// code for Firefox, Opera, IE7, etc.
xmlhttp=new XMLHttpRequest();
}
else if (window.ActiveXObject)
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
if (xmlhttp!=null)
{
xmlhttp.onreadystatechange=state_Change;
xmlhttp.open("POST",url,true);
xmlhttp.send(null);
}
else
{
alert("Your browser does not support XMLHTTP.");
}
}
function state_Change()
{
if (xmlhttp.readyState==4)
{// 4 = "loaded"
if (xmlhttp.status==200)
{// 200 = "OK"
document.getElementById("diff").innerHTML=xmlhttp.responseText;
}
else
{
alert("Problem retrieving data:" + xmlhttp.statusText);
}
}
}
</script>
my.jsp是点击a标签后,id为diff的div所要异步刷新的内容。
第二种方法:使用SSH框架所支持的Ajax方式,即dojo,DWR等框架。
jsp代码为
<sx:a href="ajaxAction?address=regression" targets="diff" executeScripts="true">
对应的ajaxaction需要在struts配置对应的action位置和result。
<action name="ajaxAction" class="com.sdu.action.ajaxAction">
<result name="regression">/ajax/Regression.jsp</result>
</action>
对应的ajaxaction则需要继承actionsupport,完成execute()方法的重写
public String execute()
{
if(address.equals("regression"))
return "regression";
}
方法比较:
因为dojo框架更加适合ssh框架下web的开发。sx:a,sx:div和sx:submit为最为常见的sx标签。在个人实现过程中因为有些jsp中包含了js文件,而调用第一种方法无法实现,而sx:a标签中有一个executeScripts属性,意思为是否执行返回内容中的js代码,可以顺利实现。所以个人更倾向于第二种已有的针对ssh框架的ajax实现方式。