This is the text to descibe how to use AJAX edit the page list.
Json dojo ArrayList critical object:
1. jsp
<!-- load dojo and provide config via data attribute -->
<script type="text/javascript"
src="<%=request.getContextPath()%>/js/dojo-toolkit-1.4.1/dojo/dojo.js"></script>
<script type="text/javascript"
src="<%=request.getContextPath()%>/js/json2.js"></script>
<script type="text/javascript"
src="<%=request.getContextPath()%>/js/json_sans_eval.js"></script>
<script>
// Function that refreshes a node's content
function sendForm() {
// Get the result node
var resultNode = dojo.byId("formResultNode");
// Using dojo.xhrGet, as very little information is being sent
dojo.xhrPost({
// The URL of the request
url: "validate.sv",
// Form to send
form: dojo.byId("formNode"),
// The success callback with result from server
load: function(data) {
dojo.style(resultNode,"display","block");
var myobj = jsonParse(data);
for (var k in myobj) {
alert(k + '=' + myobj[k].name + myobj[k].bio);
}
resultNode.innerHTML = data;
},
// The error handler
error: function() {
resultNode.innerHTML = "Your form could not be sent.";
}
});
}
</script>
2. import net.sf.json.JSONArray;
TestObject obj = new TestObject();
TestObject obj2 = new TestObject();
try {
obj.setName(request.getParameter("name"));
obj.setBio(request.getParameter("bio"));
obj.setFavoriteColor(request.getParameter("favoriteColor"));
obj.setDojoUser(request.getParameter("dojoUser"));
obj.setFavoriteDays(request.getParameterValues("favoriteDays[]"));
obj2.setName(request.getParameter("name")+"2");
obj2.setBio(request.getParameter("bio")+"2");
obj2.setFavoriteColor(request.getParameter("favoriteColor")+"2");
obj2.setDojoUser(request.getParameter("dojoUser")+"2");
obj2.setFavoriteDays(request.getParameterValues("favoriteDays[]"));
} catch (Exception e) {
e.printStackTrace();
}
List list = new ArrayList();
list.add(obj);
list.add(obj2);
JSONArray resultJSON = new JSONArray();
try {
resultJSON = JSONArray.fromObject(list);
System.out.println(resultJSON.toString());
} catch (Exception e) {
e.printStackTrace();
}
response.setContentType("text/json");
response.getWriter().println(resultJSON.toString());
3. jars and js files.
<script type="text/javascript" src='<c:out value="${ctx}" />/js/prototype/prototype.js'></script>
json and xml compare
http://wenku.baidu.com/view/49800b83d4d8d15abe234e83.html
<display:column title="" media="html" style="width: 220px;">
<input type="hidden" id="update_option_<c:out value="${mapping.cntryId}"/>_<c:out value="${mapping.segId}"/>"
name="updateOption" value="edit">
<input type="hidden" id="proftCtrId_<c:out value="${mapping.cntryId}"/>_<c:out value="${mapping.segId}"/>"
value="<c:out value="${mapping.proftCtrId}" />">
<a href="#" style="display: none" id="add_<c:out value="${mapping.cntryId}"/>_<c:out value="${mapping.segId}"/>"
οnclick="add_entry('<c:out value="${mapping.cntryId}"/>','<c:out value="${mapping.segId}"/>')">Add</a>
<div style="display: none" id="new_div_<c:out value="${mapping.cntryId}"/>_<c:out value="${mapping.segId}"/>">
<input align="left" type="text" id="new_id_<c:out value="${mapping.cntryId}"/>_<c:out value="${mapping.segId}"/>">
<input type="button" value="Save" id="save_button_<c:out value="${mapping.cntryId}"/>_<c:out value="${mapping.segId}"/>"
οnclick="save_entry('<c:out value="${ctx}"/>/profitcentermapping/save.action?cntryId=<c:out value="${mapping.cntryId}"/>&cntryName=<c:out value="${mapping.cntryName}"/>&segId=<c:out value="${mapping.segId}"/>&segName=<c:out value="${mapping.segName}"/>','<c:out value="${mapping.cntryId}"/>','<c:out value="${mapping.segId}"/>')">
<input type="button" value="Cancel" id="cancel_<c:out value="${mapping.cntryId}"/>_<c:out value="${mapping.segId}"/>"
οnclick="cancel_entry('<c:out value="${mapping.cntryId}"/>','<c:out value="${mapping.segId}"/>')" >
</div>
<span style="display: block" id="pc_id_name_<c:out value="${mapping.cntryId}"/>_<c:out value="${mapping.segId}"/>" >
<c:out value="${mapping.proftCtrId}" /> <c:out value="${mapping.proftCtrName}" />
</span>
</display:column>
function save_entry(action,cntryId,segId){
var newProftCtrId = document.getElementById("new_id_"+cntryId+"_"+segId);
var update_option=document.getElementById("update_option_"+cntryId+"_"+segId);
var url=action+"&proftCtrId="+newProftCtrId.value+"&updateOption="+update_option.value;
new Ajax.Request(url,
{ method:'get',
onLoading:onLoad(cntryId,segId),
onSuccess: function(transport){
var response = transport.responseXML;
var val=
response.getElementsByTagName("passed")[0].firstChild.data;
var msg=
response.getElementsByTagName("message")[0].firstChild.data;
var proftCtrId=
response.getElementsByTagName("proftCtrId")[0].firstChild.data;
var proftCtrName=
response.getElementsByTagName("proftCtrName")[0].firstChild.data;
var modifiedBy =
response.getElementsByTagName("modifiedBy")[0].firstChild.data;
var modifiedOn =
response.getElementsByTagName("modifiedOn")[0].firstChild.data;
//alert(val+msg+proftCtrId+proftCtrName+modifiedBy+modifiedOn);
if(val=='true'){
//update hidden proftCtrId
var hiddenProftCtrId=document.getElementById("proftCtrId_"+cntryId+"_"+segId);
hiddenProftCtrId.value = proftCtrId;
//change status to update_option_
var updateOption=document.getElementById("update_option_"+cntryId+"_"+segId);
updateOption.value="edit";
//hide new_div_
var newDiv=document.getElementById("new_div_"+cntryId+"_"+segId);
newDiv.style.display = "none";
//set value and display span for profit center id and name
var pcIdName = document.getElementById("pc_id_name_"+cntryId+"_"+segId);
pcIdName.style.display = "block";
pcIdName.innerHTML = proftCtrId+" "+proftCtrName;
//display edit_div_
var editDiv = document.getElementById("edit_div_"+cntryId+"_"+segId);
editDiv.style.display = "block";
// set innerText and display modified date span
var dateSpan = document.getElementById("date_span_"+cntryId+"_"+segId);
dateSpan.innerText = modifiedOn;
dateSpan.style.display = "block";
// set innerText and display modified user span
var userSpan = document.getElementById("user_span_"+cntryId+"_"+segId);
userSpan.innerText = modifiedBy;
dateSpan.style.display = "block";
}else{
alert(msg);
}
},
onFailure: function(){
alert('Something went wrong...');
}
});
;
}
function check_entry(action, cntryId, segId){
var proftCtrId = document.getElementById("new_id_"+cntryId+"_"+segId);
var url = action+"?proftCtrId="+proftCtrId.value;
alert(url);
new Ajax.Request(url,
{ method:'get',
onSuccess: function(transport){
var response = transport.responseXML;
var val=
response.getElementsByTagName("passed")[0].firstChild.data;
alert(val);
var msg=
response.getElementsByTagName("message")[0].firstChild.data;
alert(msg);
var proftCtrName = document.getElementById("new_name_"+cntryId+"_"+segId);
var saveButton = document.getElementById("save_button_"+cntryId+"_"+segId);
if(val=='true'){
saveButton.style.display = "block";
}else{
saveButton.style.display = "none";
}
proftCtrName.innerText = msg;
},
onFailure: function(){
alert('Something went wrong...') }
});
}
function delete_entry(action,cntryId, segId){
var proftCtrId = document.getElementById("new_id_"+cntryId+"_"+segId);
var url=action+"?cntryId="+cntryId+"&segId="+segId+"&proftCtrId="+proftCtrId;
if(confirm("Delete entry ?")){
new Ajax.Request(url,
{ method:'get',
onSuccess: function(transport){
var response = transport.responseXML;
var val=
response.getElementsByTagName("passed")[0].firstChild.data;
var msg=
response.getElementsByTagName("message")[0].firstChild.data;
if(val=='true'){
//update hidden proftCtrId
var hiddenProftCtrId=document.getElementById("proftCtrId_"+cntryId+"_"+segId);
hiddenProftCtrId.value = "";
//change status to update_option_
var updateOption=document.getElementById("update_option_"+cntryId+"_"+segId);
updateOption.value="add";
//display add_
var addLink=document.getElementById("add_"+cntryId+"_"+segId);
addLink.style.display = "block";
//hide new_div_
var newDiv=document.getElementById("new_div_"+cntryId+"_"+segId);
newDiv.style.display = "none";
//clean value and hide span for profit center id and name
var pcIdName = document.getElementById("pc_id_name_"+cntryId+"_"+segId);
pcIdName.style.display = "none";
pcIdName.innerHTML = "";//proftCtrId+" "+proftCtrName; deleted
//hide edit_div_
var editDiv = document.getElementById("edit_div_"+cntryId+"_"+segId);
editDiv.style.display = "none";
// clean innerText and hide modified date span
var dateSpan = document.getElementById("date_span_"+cntryId+"_"+segId);
dateSpan.innerText = "";
dateSpan.style.display = "none";
// clean innerText and hide modified user span
var userSpan = document.getElementById("user_span_"+cntryId+"_"+segId);
userSpan.innerText = "";
dateSpan.style.display = "none";
}else{
alert(msg);
}
},
onFailure: function(){
alert('Something went wrong...') }
});
}
}
/*
* AJAX stuff
* depends on the value of updateOption. will do insert or update to database
* return XML to client
*/
public void save() throws Exception{
boolean passed = false;
String msg = "Nothing found to display.";
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");
String proftCtrId = request.getParameter("proftCtrId");
String proftCtrName = profitCenterMappingDao.existPC(proftCtrId);
boolean pcWithMapping = profitCenterMappingDao.existPCM(proftCtrId);
if(proftCtrName==null){
returnNoSuchProftCtrXML(passed,msg,proftCtrId);
log.info("can not find profit center: "+proftCtrId);
}else if(pcWithMapping){
returnDuplicateProftCtrXML(passed,msg,proftCtrId);
log.info("profit center: "+proftCtrId+" has been mapped.");
}else{
UserDataBean userData = (UserDataBean)request.getSession().getAttribute(WWMDConstants.SESS_USER_DATA_BEAN);
String currentUserName = userData.getUsername();
String cntryId = request.getParameter("cntryId");
String cntryName = request.getParameter("cntryName");
String segId = request.getParameter("segId");
String segName = request.getParameter("segName");
String updateOption = request.getParameter("updateOption");
Date currentDate = getCurrentDate();
String date = formatDate(currentDate);
ProfitCenterMapping pcm= new ProfitCenterMapping();
pcm.setCntryId(cntryId);
pcm.setCntryName(cntryName);
pcm.setSegId(segId);
pcm.setSegName(segName);
pcm.setModifiedBy(currentUserName);
pcm.setModifiedOn(currentDate);
pcm.setProftCtrId(proftCtrId);
pcm.setProftCtrName(proftCtrName);
if (UPDATE_ADD.equalsIgnoreCase(updateOption)){
passed = profitCenterMappingDao.addProfitCenterMapping(pcm);
if(passed){
msg = "add success!";
log.info("added profit center. id:"+proftCtrId+" name:"+proftCtrName);
}
}else if(UPDATE_EDIT.equalsIgnoreCase(updateOption)){
passed = profitCenterMappingDao.updateProfitCenterMapping(pcm);
if(passed){
msg = "modify success!";
log.info("updated profit center. id:"+proftCtrId+" name:"+proftCtrName);
}
}
if(passed){
pcm = profitCenterMappingDao.getPCM(cntryId, segId);
}
returnProftCtrXML(passed,msg,pcm);
}
}
private void returnProftCtrXML(boolean passed,String msg,ProfitCenterMapping pcm)throws Exception{
String proftCtrName = HTMLEncoder.htmlEncode(pcm.getProftCtrName());
log.info("encode profit center name from "+pcm.getProftCtrName()+" to "+proftCtrName);
PrintWriter pw = response.getWriter();
pw.println("<response>");
pw.println("<passed>"+passed+"</passed>");
pw.println("<message>" + msg + "</message>");
pw.println("<proftCtrId>"+pcm.getProftCtrId()+"</proftCtrId>");
pw.println("<proftCtrName>" + proftCtrName + "</proftCtrName>");
pw.println("<modifiedBy>"+pcm.getModifiedBy()+"</modifiedBy>");
pw.println("<modifiedOn>" + formatDate(pcm.getModifiedOn()) + "</modifiedOn>");
pw.println("</response>");
pw.close();
}
/**
* AJAX stuff
* Deletes current mapping.
*/
public void remove()throws Exception{
boolean passed = false;
String msg = "remove failed!";
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");
String cntryId = request.getParameter("cntryId");
String segId = request.getParameter("segId");
ProfitCenterMapping pcm= new ProfitCenterMapping();
pcm.setCntryId(cntryId);
pcm.setSegId(segId);
pcm = profitCenterMappingDao.getPCM( cntryId, segId);
passed = profitCenterMappingDao.deleteProfitCenterMapping(pcm);
if(passed){msg = "remove success!";}
PrintWriter pw = response.getWriter();
pw.println("<response>");
pw.println("<passed>"+passed+"</passed>");
pw.println("<message>" + msg + "</message>");
pw.println("</response>");
pw.close();
log.info("deleted profit center id:"+pcm.getProftCtrId()+" name:"+pcm.getProftCtrName());
}
private void returnNoSuchProftCtrXML(boolean passed,String msg,String proftCtrId)throws Exception{
msg = "Failed! Profit center "+proftCtrId+" is not exist.";
PrintWriter pw = response.getWriter();
pw.println("<response>");
pw.println("<passed>"+passed+"</passed>");
pw.println("<message>" + msg + "</message>");
pw.println("<proftCtrId>"+msg+"</proftCtrId>");
pw.println("<proftCtrName>" +msg + "</proftCtrName>");
pw.println("<modifiedBy>"+msg+"</modifiedBy>");
pw.println("<modifiedOn>" + msg + "</modifiedOn>");
pw.println("</response>");
pw.close();
}
private void returnDuplicateProftCtrXML(boolean passed,String msg,String proftCtrId)throws Exception{
msg = "Duplicate! Profit center "+proftCtrId+" has been mapped.";
PrintWriter pw = response.getWriter();
pw.println("<response>");
pw.println("<passed>"+passed+"</passed>");
pw.println("<message>" + msg + "</message>");
pw.println("<proftCtrId>"+msg+"</proftCtrId>");
pw.println("<proftCtrName>" +msg + "</proftCtrName>");
pw.println("<modifiedBy>"+msg+"</modifiedBy>");
pw.println("<modifiedOn>" + msg + "</modifiedOn>");
pw.println("</response>");
pw.close();
}