struts2的xml中
<constant name="struts.action.extension" value="v"/>
<package name="jsonPackage" extends="json-default,struts-default" namespace="/ajax/json">
<action name="listUsers" class="jsonAction" method="listUsers">
<result type="json"></result>
</action>
</package>
上面的jsonAction是在spring中定义过的,listUsers是该action中的方法;
JsonAction.java
public class JsonAction {
private transient UserServiceImp userService;
private List<UserInfo> users;//UserInfo是一个pojo
@SuppressWarnings("unchecked")
public String listUsers(){
users = userService.findAll();
return Action.SUCCESS;
}
//所有和响应数据无关的信息都要用JSON声明一下
@JSON(serialize = false)
public UserServiceImp getUserService() {
return userService;
}
public void setUserService(UserServiceImp userService) {
this.userService = userService;
}
public List<UserInfo> getUsers() {
return users;
}
public void setUsers(List<UserInfo> users) {
this.users = users;
}
}
json.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%
String path = request.getContextPath();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<body>
<s:form id="jsonForm" name="jsonForm">
<table>
<tr>
<td>
<s:select id="selectId" list="{'第一个元素','第二个元素','第三个元素'}" headerKey="" headerValue="请选择"/>
</td>
<td>
<input type="button" value="JSON来了" />
</td>
</tr>
</table>
</s:form>
</body>
上面是一个select控件和button按钮 当点击按钮触发requestJSON(id)事件
参数是select控件的id
下面是最重要脚本实现:
<script src="prototype.js" type="text/javascript"></script>
<script>
function requestJSON(selectId){
var responseObject;
var url = "<%=path%>/ajax/json/listUsers.v?"+
$("saveForm").serialize(); //这里的参数是序列化的表单
new Ajax.Request(url,{
method: 'get';
onSuccess: function(transport){
//以JSON格式返回action中定义的users集合
responseObject = transport.responseText.evalJSON().users;
//调用刷新的方法
refreshSelectElement(responseObject,selectId,"请选择","");
}
});
}
//刷新
function refreshSelectElement(responseObject,selectId,headerKey,headerValue){
var selectObject = document.getElementById(selectId);
clearSelectOption(selectObject);//清空的方法
selectObject.options[0] = new Option(headerKey,headerValue);
for(var i=0;i<selectObject.length;i++){
//添加新项 username和uid是UserInfo中的属性
//responseObject中每一项就是一个UserInfo
//所以可以使用responseObject.username的形
selectObject.options[i+1] =
new Option(responseObject.username,responseObject.uid);
}
}
//清空
function clearSelectOption(selectObject){
while(selectObject.options.length>0){
selectObject.remove(0);
}
}</script>
该过程主要实现了当点击按钮的时候,selecet控件中的值全部换成了新的值
即形成了select控件的局部刷新,从而获取最新的数据