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

📄 详细分析四.txt

📁 开源论坛实现
💻 TXT
📖 第 1 页 / 共 5 页
字号:
				}
当我们点击增加时:出现div为addfriend的内容显示,下面是一个特别之处:
   <td width="82%">
        <s:textfield id="friendName" name="friendName" cssClass="input2" size="40" maxlength="20" onkeypress="return handleEnter(this, event);"></s:textfield>
      </td>
-->
function handleEnter (field, event) {
  var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;//firefox2.0中不支持 window.event.keyCode!
  if (keyCode == 13) { //回车键(也就相当于<br>没有)
    return false;
  }
  return true;
}
当提交时:
function friendAdd() {
  var isBlack = $('isBlack').value;
  var oFriendAddAjax = new FriendAddAjax(isBlack);
  oFriendAddAjax.addFriend();
}
ar FriendAddAjax = Class.create();

FriendAddAjax.prototype = {
  initialize: function(isBlack) {
    this.isBlack = isBlack;
  },

  addFriend: function() {
    showExeMsg();
    var url = getActionMappingURL("/friendSet");
    var pars = "action=addsave&ajax=xml&friendName="+$('friendName').value+"&friendComment="
    + encodeURIComponent($('friendComment').value) + "&isBlack="+this.isBlack //带全参数哦!
    var myAjax = new Ajax.Request(url, {method: 'post', parameters: pars, onComplete: this.addFriendCompleted.bind(this)});
  },

  addFriendCompleted: function(res) {

    resText = res.responseText;
  	var jsonMsgObj = new JsonMsgObj(resText);
  	var codeid = jsonMsgObj.getCodeid();

    hiddenExeMsg();
    alert(jsonMsgObj.getMessage());
    if (codeid == "0") {
      closeFriendNewPage();
      if (this.isBlack == "0") {
        loadFriendList();
      }
      if (this.isBlack == "1") {
        loadBlackUserList();
      }
    }
  }
};
对于FriendSet.java的addsave方法:
f = this.getFriendFactory().getInstance(this.getUserSession().getId());
产生一个freind实例用于填充之.
f = this.getFriendService().saveFriend(f); // 保存用户
			this.getFriendService().friendIDsToFile(this.getUserSession().getId()); // 将用户列表写入文件
			if (this.getIsBlack() == 0) { // 添加好友情况下
				ui.setUserKnow(ui.getUserKnow() + 1); // 增加用户人缘系数
				this.getUserService().saveUserInfo(ui);
			} else {
				ui.setUserKnow(ui.getUserKnow() - 1); // 减少用户人缘系数
				this.getUserService().saveUserInfo(ui);
			}
好的,我们看note.bbscs:
<action name="note" class="noteAction">
			<interceptor-ref name="mainUserAuthInterceptorStack"></interceptor-ref>
			<interceptor-ref name="requestBasePathInterceptor"></interceptor-ref>
			<result name="success">/WEB-INF/jsp/note.jsp</result>
			<result name="noteInbox">/WEB-INF/jsp/noteInbox.jsp</result>
			<result name="noteOutbox">/WEB-INF/jsp/noteOutbox.jsp</result>
			<result name="input">/WEB-INF/jsp/noteSend.jsp</result>
			<result name="noteReadInbox">/WEB-INF/jsp/noteReadInbox.jsp</result>
		</action>
不过这里用到了requestBasePathInterceptor,注意他对应的是NoteAction.java:有fromID,id,ids,noteContext,noteTitle,toID,toUserName,needRe,pageList等属性.
public String index() {
		return SUCCESS;
	}
看note.jsp:<body onload="loadNoteInbox();">它有了js/note.js中的一些函数:
function loadNoteInbox() {
  $('noteListDiv').innerHTML = pageLoadingCenter;//noteListDiv是一个空的div,var pageLoadingCenter = "<div align=\"center\"><s:text name="js.pageLoading"/></div>";
  var urls = getActionMappingURL("/note");
  var pars = "action=inbox&ajax=shtml";
  var myAjax = new Ajax.Updater("noteListDiv", urls, {method: 'get', parameters: pars});
  showInboxNum();
  showOutboxNum();
}
-->
function showInboxNum() {

  var url = getActionMappingURL("/note");
  var pars = "action=innum&ajax=xml";

  var myAjax = new Ajax.Request(url, {method: 'get', parameters: pars, onComplete: showInboxNumComplete});

}

function showInboxNumComplete(res) {
	var resText = res.responseText;
  	var jsonMsgObj = new JsonMsgObj(resText);

  	$('inboxNumDiv').innerHTML = jsonMsgObj.getText();
}

function showOutboxNum() {

  var url = getActionMappingURL("/note");
  var pars = "action=outnum&ajax=xml";

  var myAjax = new Ajax.Request(url, {method: 'get', parameters: pars, onComplete: showOutboxNumComplete});
}

function showOutboxNumComplete(res) {
	resText = res.responseText;
  	var jsonMsgObj = new JsonMsgObj(resText);
  	$('outboxNumDiv').innerHTML = jsonMsgObj.getText();
}
这里有三个ajax请求,对应的java代码:
public String innum() {
		long inBoxNum = this.getNoteService().getNoteAllNumInBox(this.getUserSession().getId());
		this.getAjaxMessagesJson().setMessage("0", "", String.valueOf(inBoxNum));
		return RESULT_AJAXJSON;
	}
	public String outnum() {
		long outBoxNum = this.getNoteService().getNoteAllNumOutBox(this.getUserSession().getId());
		this.getAjaxMessagesJson().setMessage("0", "", String.valueOf(outBoxNum));
		return RESULT_AJAXJSON;
	}
	public String inbox() { //这个方法带分页哦!~
		Pages pages = new Pages();
		pages.setPage(this.getPage());
		pages.setPerPageNum(this.getSysConfig().getPmPerPage());
		//pages.setPerPageNum(2);
		pages.setFileName(this.getBasePath()
				+ BBSCSUtil.getActionMappingURLWithoutPrefix("note?action=inbox&ajax=shtml"));
		this.setPageList(this.getNoteService().findNotesInBox(this.getUserSession().getId(), pages));//可以用PageList!
		return "noteInbox"; //好,接下来我们看看它对应的页面!
	}
我们看看noteInbox.jsp,我们得到的pageList封装了所有的东东。
 <span class="font1"><strong><s:text name="note.title"/>:<s:property value="%{pageList.pages.totalNum}"/></strong></span> //总数的显示!
                    <input id="checkall" type="checkbox" name="checkall" value="checkall" onclick="checkAll();"/>
-->
function checkAll() {
  var ca = document.getElementById("checkall");
  var ids = document.getElementsByName("ids");
  for (var i = 0; i < ids.length; i++) {
      ids[i].checked = ca.checked;   //所有的ids checkbox与你选择的一致!
  }
}
下面是主要的遍历整个收件箱的其中关于note显示部分的过程:
 <td colspan="2">
                  <div id="noteDiv<s:property value="#note.id"/>" class="noteClass1" style="display:none">
                    <div id="noteDetail<s:property value="#note.id"/>"></div>
                    <div id="noteSend<s:property value="#note.id"/>" style="display:none">
                      <form action="<%=BBSCSUtil.getActionMappingURL("/note",request)%>" name="noteSendForm<s:property value="#note.id"/>">
                      <INPUT TYPE="hidden" name="id" value="<s:property value="#note.id"/>">
                      <table width="100%" border="0" cellpadding="5" cellspacing="0">

                        <tr>
                          <td width="15%"><s:text name="note.tousername"/>:</td>
                          <td width="85%"><input name="toUserName" type="text" value="<s:property value="#note.fromUserName"/>" readonly="readonly" class="input2" size="40" /></td>
                        </tr>
                        <tr>
                          <td width="15%"><s:text name="note.msg.title"/>:</td>
                          <td width="85%"><input name="noteTitle" type="text" class="input2" size="40" /></td>
                        </tr>
                        <tr>
                          <td valign="top"><s:text name="note.content"/>:</td>
                          <td><textarea name="noteContext" cols="40" rows="5" class="textarea1"></textarea></td>
                        </tr>
                        <tr>
                          <td><s:text name="note.needre"/>:</td>
                          <td><input type="checkbox" name="needRe" value="1" />
                            <s:text name="note.needre.notice"/></td>
                        </tr>
                        <tr>
                          <td>&nbsp;</td>
                          <td>
                            <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"/>"/>
                          </td>
                        </tr>

                      </table>
                      </form>
                    </div>
                    <div id="needRe<s:property value="#note.id"/>" style="display:none"><s:property value="#note.needRe"/></div>
                  </div>
                </td>
我们先看loadNoteReadInbox()函数:
function loadNoteReadInbox(noteId,page) {

  needRe_span = document.getElementById("needRe"+noteId);//是否需要回复!
  var needRe_num_val = needRe_span.innerHTML;
  var needRe_int_val = parseInt(needRe_num_val);
  if (needRe_int_val == 1) {
    autoRe(noteId);//调用回复!见下
  }
  displayElement("noteDiv"+noteId);//显示note在noteDiv+noteId处!
  var urls = getActionMappingURL("/note");
  var pars = "action=readinbox&ajax=shtml&id=" + noteId + "&page=" + page;
  var myAjax = new Ajax.Updater("noteDetail"+noteId, urls, {method: 'get', parameters: pars});//更新的是noteDetail处div,注意另外一个noteSend的div还没显示出来!
  $('noteIsNew'+noteId).innerHTML = "<img src=\"images/note_old.gif\"/>";
}
-->
function autoRe(noteId) {
  var cRe = confirm(confirmNoteRe); //var confirmNoteRe = "<s:text name="js.confirmNoteRe"/>";
  if (cRe) {
    var oNoteAutoReOjbAjax = new NoteAutoReOjbAjax(noteId);
    oNoteAutoReOjbAjax.autore();
  }
  else {
    return false;
  }
}
-->
ar NoteAutoReOjbAjax = Class.create();

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

  autore: function() {

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

  autoreCompleted: function(res) {
  	resText = res.responseText;
  	var jsonMsgObj = new JsonMsgObj(resText);
  	var codeid = jsonMsgObj.getCodeid();
  	alert(jsonMsgObj.getMessage());
  	if (codeid == "0") {
  		refreshBoxNum("outbox",1);//增加发件箱note数
/**
function refreshBoxNum(boxName,num) {
  var num_span;
  if (boxName == "inbox") {
    num_span = document.getElementById("inboxNumDiv");
  }
  else {
    num_span = document.getElementById("outboxNumDiv");
  }
  var num_val = num_span.innerHTML;
  var int_val = parseInt(num_val);
  var new_int_val = int_val + num;
  num_span.innerHTML = new_int_val;
}
*/
  		document.getElementById("needRe"+this.noteId).innerHTML = "0";//不需要回复了!
  	}
  }
};
好,我们看noteInbox.jsp的底部相关JSP代码:
  <tr>
          <td colspan="3" class="bgColor3">
            <table width="100%" border="0" cellpadding="0" cellspacing="0">
              <tr>
                <td width="67%"><s:text name="bbscs.pagebreak"/>: <bbscs:pages value="%{pageList.pages}" javaScript="loadNoteInboxUrl"/> <a href="javascript:;" onclick="delAllInBox();"><s:text name="note.delall"/></a></td>
                <td width="33%">
                  <div align="right"><s:text name="note.selected"/>:
                    <select name="noteOp" class="select1">
                      <option value="1" selected="selected"><s:text name="bbscs.del"/></option>
                      <option value="2"><s:text name="note.getout"/></option>
                    </select>
                    <input name="Submit" type="submit" class="button1" onclick="noteOpInBox();" value="<s:text name="bbscs.exe"/>"/>
                  </div>
                  <div id="cpage" style="display:none"><s:property value="%{pageList.pages.page}"/></div> //当前页
                </td>
              </tr>
我们看js:
function delAllInBox() {
  var del = confirm(confirm_del);
  if (del) {
    var url = getActionMappingURL("/note");
    var pars = "action=delallinbox";
    var myAjax = new Ajax.Request(url, {method: 'get', parameters: pars, onComplete: delAllInBoxComplete});
  }
  else {
    return false;
  }
}
function noteOpInBox() {
  var noteOpSelectObj = document.getElementById("noteOp");

  if (noteOpSelectObj.options[noteOpSelectObj.selectedIndex].value == "1") {
  deleteIdsInboxNote(); //删除选择ids的note
  }
  //if (noteOpSelectObj.options[noteOpSelectObj.selectedIndex].value == "2") {
 
  //} //晕,还没有实现呢~~~
}
-->
function deleteIdsInboxNote() {
  var del = confirm(confirm_del);
  if (del) {
    var pageNum = document.getElementById("cpage").innerHTML;//获得当前页信息
    var ids = document.getElementsByName("ids");
    var noteNum = 0;

    var data = "";
    for (var i = 0; i < ids.length; i++) {
      if (ids[i].checked) {
        data += "&ids=";
        data += ids[i].value;//data=&ids=XX&ids=XX
        noteNum++;//note删除数!
      }
    }
    if (noteNum > 0) {
    	var oNoteDelIdsInboxAjax = new NoteDelIdsInboxAjax(pageNum,noteNum,data);
    	oNoteDelIdsInboxAjax.dels();
    }
    else {
    return false;
    }
  }
  else {
    return false;
  }
我们看看NoteDelIdsInboxAjax(pageNum,noteNum,data);
var NoteDelIdsInboxAjax = Class.create();
NoteDelIdsInboxAjax.prototype = {
  initialize: function(pageNum,noteNum,data) {
  	this.pageNum = pageNum;
  	this.noteNum = noteNum;
  	this.data = data;
  },
  dels: function() {

    var url = getActionMappingURL("/note");
    var pars = "action=delidsinbox&ajax=xml" + this.data;
    var myAjax = new Ajax.Request(url, {method: 'post', parameters: pars, onComplete: this.delsCompleted.bind(this)});
  },

⌨️ 快捷键说明

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