⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 详细分析四.txt

📁 开源论坛实现
💻 TXT
📖 第 1 页 / 共 5 页
字号:
  initialize: function(noteId,pageNum) {
  	this.noteId = noteId;
    this.pageNum = pageNum;
  },

  del: function() {

    var url = getActionMappingURL("/note");
    var pars = "action=delinbox&ajax=xml&id=" + this.noteId;
    var myAjax = new Ajax.Request(url, {method: 'get', parameters: pars, onComplete: this.delCompleted.bind(this)});
  },

  delCompleted: function(res) {
  	resText = res.responseText;
  	var jsonMsgObj = new JsonMsgObj(resText);
  	var codeid = jsonMsgObj.getCodeid();
  	alert(jsonMsgObj.getMessage());
  	if (codeid == "0") {
  		refreshBoxNum("inbox",-1);
  		var urls = getActionMappingURL("/note?action=inbox&ajax=shtml&page=" + this.pageNum);
  		loadNoteInboxUrl(urls);
  	}
  }
};

//===
function deleteOutboxNote(noteId,pageNum) {
  //alert(noteId+"/" +pageNum);
  var del = confirm(confirm_del);
  if (del) {
    var oNoteDelOutboxOjbAjax = new NoteDelOutboxOjbAjax(noteId,pageNum);
    oNoteDelOutboxOjbAjax.del();
  }
  else {
    return false;
  }
}

var NoteDelOutboxOjbAjax = Class.create();

NoteDelOutboxOjbAjax.prototype = {
  initialize: function(noteId,pageNum) {
  	this.noteId = noteId;
    this.pageNum = pageNum;
  },

  del: function() {

    var url = getActionMappingURL("/note");
    var pars = "action=deloutbox&ajax=xml&id=" + this.noteId;
    var myAjax = new Ajax.Request(url, {method: 'get', parameters: pars, onComplete: this.delCompleted.bind(this)});
  },

  delCompleted: function(res) {
  	resText = res.responseText;
  	var jsonMsgObj = new JsonMsgObj(resText);
  	var codeid = jsonMsgObj.getCodeid();
  	alert(jsonMsgObj.getMessage());
  	if (codeid == "0") {
  		refreshBoxNum("outbox",-1);
  		var urls = getActionMappingURL("/note?action=outbox&ajax=shtml&page=" + this.pageNum);
  		loadNoteOutboxUrl(urls);
  	}
  }
};

function loadNoteSendInNote(noteId) {
   Element.show('noteSend' + noteId);
 }
function closeNoteDiv(noteId) {
      hiddenElement("noteDiv"+noteId);
}
关于loadNoteSendInNote,它其实是一个内部的div执行回复功能用的!其关键的代码:
  <input name="Submit2" type="button" class="button1" onclick="noteRe('<s:property value="#note.id"/>');" value="<s:text name="bbscs.re"/>" />
<input type="button" name="closeSendInButton" class="button1" onclick="closeNoteSendInNote('<s:property value="#note.id"/>');" value="<s:text name="bbscs.close"/>"/>
这里我们看noteRe:
function noteRe(noteId) {
	var oNoteReAjax = new NoteReAjax(noteId);
	oNoteReAjax.re();
}

var NoteReAjax = Class.create();
NoteReAjax.prototype = {
  initialize: function(noteId) {
  	this.noteId = noteId;
  },
  re: function() {
  	var url = getActionMappingURL("/note");
  	var noteForm = eval("document.noteSendForm" + this.noteId);
  	var needRe = 0;
  	if (noteForm.needRe.checked) {
  		needRe = 1;
  	}
  	var pars = "action=re&ajax=xml&toUserName=" + noteForm.toUserName.value + "&noteTitle="
  	+ encodeURIComponent(noteForm.noteTitle.value) + "&noteContext=" + encodeURIComponent(noteForm.noteContext.value)
  	+ "&needRe=" + needRe + "&id="+noteForm.id.value;

    var myAjax = new Ajax.Request(url, {method: 'post', parameters: pars, onComplete: this.reCompleted.bind(this)});
  },
  reCompleted: function(res) {
  	resText = res.responseText;
  	var jsonMsgObj = new JsonMsgObj(resText);
  	var codeid = jsonMsgObj.getCodeid();
  	alert(jsonMsgObj.getMessage());
  	if (codeid == "0") {
  		refreshBoxNum("outbox",1);
  		var noteForm = eval("document.noteSendForm" + this.noteId);
  		noteForm.noteTitle.value = "";
  		noteForm.noteContext.value = "";
  		closeNoteSendInNote(this.noteId);
  		$('noteReImg'+this.noteId).innerHTML = "<img src=\"images/note_replied.gif\" alt=\"\"/>";
  	}
  }
};
而它在java文件中是这样完成任务的:
public String re() {
		if (this.getSysConfig().isInPmFloodTime(this.getUserCookie().getLastSendNoteTime())) {
			this.getAjaxMessagesJson().setMessage(
					"E_NOTE_INFLOODTIME",
					this.getText("error.note.isinfloodtime", new String[] { String.valueOf(this.getSysConfig()
							.getPmFloodTime()) }));
			return RESULT_AJAXJSON;
		}

		Note note = this.getNoteService().findNoteByIDToID(this.getId(), this.getUserSession().getId());
		if (note == null) {
			this.getAjaxMessagesJson().setMessage("E_NOTE_NOTEXIST", this.getText("error.note.notexist"));
			return RESULT_AJAXJSON;
		}
		note.setNeedRe(0);
		note.setIsRe(1);
		try {
			note = this.getNoteService().saveNote(note);
		} catch (BbscsException ex3) {
			logger.error(ex3);
		}

		if (StringUtils.isBlank(this.getToUserName()) || StringUtils.isBlank(this.getNoteTitle())
				|| StringUtils.isBlank(this.getNoteContext())) {
			this.getAjaxMessagesJson().setMessage("E_NULL", this.getText("error.nullerror"));
			return RESULT_AJAXJSON;
		}

		if (BBSCSUtil.getSysCharsetStrLength(this.getNoteContext()) > this.getSysConfig().getPmMaxLength()) {
			this.getAjaxMessagesJson().setMessage(
					"E_NOTE_TOOLONG",
					this.getText("error.note.context.toolong", new String[] { String.valueOf(this.getSysConfig()
							.getPmMaxLength()) }));
			return RESULT_AJAXJSON;
		}

		if (this.getToUserName().equalsIgnoreCase(this.getUserSession().getUserName())) {
			this.getAjaxMessagesJson().setMessage("E_NOTE_USERSAME", this.getText("error.note.usersame"));
			return RESULT_AJAXJSON;
		}

		UserInfo ui = this.getUserService().findUserInfoByUserName(this.getToUserName());
		if (ui == null) {
			this.getAjaxMessagesJson().setMessage("E_USER_NOEXIST", this.getText("error.note.touser.noexist"));
			return RESULT_AJAXJSON;
		}

		// todo 不接收悄悄话
		if (ui.getReceiveNote() != 1) {
			this.getAjaxMessagesJson().setMessage("E_NOTE_USER_NOT_RECEIVE", this.getText("error.note.usernotreceive"));
			return RESULT_AJAXJSON;
		}

		// todo 黑名单
		Friend f = this.getFriendService().findFriendByName(this.getUserSession().getUserName(), ui.getId());
		if (f != null && f.getIsBlack() == 1) {
			this.getAjaxMessagesJson().setMessage("E_NOTE_USER_IS_BLACK", this.getText("error.note.userisinblack"));
			return RESULT_AJAXJSON;
		}

		Note inboxNote = this.getNoteFactory().getInstance(note.getFromID()); // 对方收件箱对象
		Note outboxNote = this.getNoteFactory().getInstance(this.getUserSession().getId()); // 自己发件箱对象

		Date sdate = new Date();

		inboxNote.setCreateTime(sdate);
		inboxNote.setFromID(this.getUserSession().getId());
		inboxNote.setFromNickName(this.getUserSession().getNickName());
		inboxNote.setFromUserName(this.getUserSession().getUserName());
		inboxNote.setIsNew(1);
		inboxNote.setIsRe(0);
		inboxNote.setNeedRe(this.getNeedRe());
		inboxNote.setNoteContext(this.getNoteContext());
		inboxNote.setNoteTitle(this.getNoteTitle());
		inboxNote.setNoteType(1);
		inboxNote.setToID(ui.getId());
		inboxNote.setToNickName(ui.getNickName());
		inboxNote.setToUserName(ui.getUserName());
		inboxNote.setSysMsg(0);

		outboxNote.setCreateTime(sdate);
		outboxNote.setFromID(this.getUserSession().getId());
		outboxNote.setFromNickName(this.getUserSession().getNickName());
		outboxNote.setFromUserName(this.getUserSession().getUserName());
		outboxNote.setIsNew(0);
		outboxNote.setIsRe(0);
		outboxNote.setNeedRe(0);
		outboxNote.setNoteContext(this.getNoteContext());
		outboxNote.setNoteTitle(this.getNoteTitle());
		outboxNote.setNoteType(0);
		outboxNote.setToID(ui.getId());
		outboxNote.setToNickName(ui.getNickName());
		outboxNote.setToUserName(ui.getUserName());
		outboxNote.setSysMsg(0);

		try {
			this.getNoteService().createNote(inboxNote, outboxNote);
			this.getUserCookie().addLastNoteSendTime();
			this.getAjaxMessagesJson().setMessage("0", this.getText("note.re.ok"));
		} catch (BbscsException ex) {
			logger.error(ex);
			this.getAjaxMessagesJson().setMessage("E_NOTE_ADDFAILED", this.getText("error.note.add.error"));
		}
		return RESULT_AJAXJSON;
	}
回到NoteAction.java:注意到autore是个回执用的!它发的短信加prefix!
this.getNoteService().createNote(inboxNote, outboxNote);
public String delallinbox() {
		try {
			this.getNoteService().removeAllInBox(this.getUserSession().getId());
			this.getAjaxMessagesJson().setMessage("0", this.getText("note.del.ok"));
		} catch (BbscsException ex4) {
			logger.error(ex4);
			this.getAjaxMessagesJson().setMessage("E_NOTE_DEL", this.getText("error.note.del.error"));
		}
		return RESULT_AJAXJSON;
	}
public String delinbox() {
		try {
			this.getNoteService().removeByIDToID(this.getId(), this.getUserSession().getId());//由id和toid
			this.getAjaxMessagesJson().setMessage("0", this.getText("note.del.ok"));
		} catch (BbscsException ex1) {
			logger.error(ex1);
			this.getAjaxMessagesJson().setMessage("E_NOTE_DEL", this.getText("error.note.del.error"));
		}
		return RESULT_AJAXJSON;
	}
public String delidsinbox() {  //根据ids删除相关toid用户的note!
		if (this.getIds() == null || this.getIds().isEmpty()) {
			this.getAjaxMessagesJson().setMessage("E_NOTE_IDSISNULL", this.getText("error.note.ids.null"));
			return RESULT_AJAXJSON;
		}
		try {
			this.getNoteService().removeInIDsToID(this.getIds(), this.getUserSession().getId());
			this.getAjaxMessagesJson().setMessage("0", this.getText("note.del.ok"));
		} catch (BbscsException ex5) {
			logger.error(ex5);
			this.getAjaxMessagesJson().setMessage("E_NOTE_DEL", this.getText("error.note.del.error"));
		}
		return RESULT_AJAXJSON;
	}

好,我们回到note.jsp,我们看changeBox:
function changeBox() {
  var boxSelectObj = document.getElementById("boxSelect");

  if (boxSelectObj.options[boxSelectObj.selectedIndex].value == "1") {
    loadNoteInbox();
  }
  if (boxSelectObj.options[boxSelectObj.selectedIndex].value == "2") {
    loadNoteOutbox();
  }
}
这里,有loadNoteOutbox我们应该可以发现它与收件箱十分的类似!我们也看看noteOutbox对应的noteOutbox.jsp,我们发现也大致相同,因此我们不对其专门分析。我们在回到note.jsp,它有一个发送的功能!
 <strong><a href="javascript:;" onclick="loadNoteSend();"><s:text name="note.sendnew"/></a></strong>
-->
function loadNoteSend() {
  displayElement("noteSendDiv");
  $('noteSendDiv').innerHTML = pageLoadingCenter;
  var urls = getActionMappingURL("/note");
  var pars = "action=add&ajax=shtml"; //发送
/**
	public String add() {
		this.setAction("addsave");
		return INPUT;//<result name="input">/WEB-INF/jsp/noteSend.jsp</result>
	}
*/
  var myAjax = new Ajax.Updater("noteSendDiv", urls, {method: 'get', parameters: pars});
}
我们提交可触发它的 onclick="noteAdd();":
function noteAdd() {
  var url = getActionMappingURL("/note");
  var needRe = 0;
  if ($('needRe').checked) {
    needRe = 1;
  }
  //alert(needRe);
  var pars = "action=addsave&ajax=xml&toUserName=" + $('toUserName').value + "&noteTitle="
  + encodeURIComponent($('noteTitle').value) + "&noteContext=" + encodeURIComponent($('noteContext').value)
  + "&needRe=" + needRe;
  //alert(data);
  var myAjax = new Ajax.Request(url, {method: 'post', parameters: pars, onComplete: noteAddComplete});
}
function noteAddComplete(res) {
	resText = res.responseText;
  	var jsonMsgObj = new JsonMsgObj(resText);
  var codeid = jsonMsgObj.getCodeid();
  alert(jsonMsgObj.getMessage());
  if (codeid == "0") {
    closeNoteSend();
    refreshBoxNum("outbox",1);//更新发的!
  }
}
对于这个外部发送和内部回复差不多,我们就省略之。
OK!我们看下一个:书签管理bookMark.bbscs
<action name="bookMark" class="bookMarkAction">
			<interceptor-ref name="mainUserAuthInterceptorStack"></interceptor-ref>
			<interceptor-ref name="requestBasePathInterceptor"></interceptor-ref>
			<result name="success">/WEB-INF/jsp/bookMark.jsp</result>
			<result name="list">/WEB-INF/jsp/bookMarkList.jsp</result>
			<result name="input">/WEB-INF/jsp/bookMarkAddEdit.jsp</result>
		</action>
我们直接看BookMarkAction.java:	
public String index() {
		return SUCCESS;
	}
而在bookMark.jsp与note.jsp类似,也用了bookMark.js,且body部分代码:
<body onload="loadBookMarkListPage();">
<div id="bookMarkListDiv"></div>
<div id="addEditBookMarkDiv"></div>
</body>
function loadBookMarkListPage() {
  $('bookMarkListDiv').innerHTML = pageLoadingCenter;
  var urls = getActionMappingURL("/bookMark");
  var pars = "action=list&ajax=shtml";
  var myAjax = new Ajax.Updater("bookMarkListDiv", urls, {method: 'get', parameters: pars});
}
我们进

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -