📄 详细分析四.txt
字号:
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 + "¬eTitle="
+ encodeURIComponent(noteForm.noteTitle.value) + "¬eContext=" + 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 + "¬eTitle="
+ encodeURIComponent($('noteTitle').value) + "¬eContext=" + 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 + -