- 浏览: 151395 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
hx0637:
楼主!小弟要面临面试了,能否指导下小弟?
面试 深圳一家公司的 -
kljismi:
你好,我现在正在开这项目的代码,但是我不明白@Privileg ...
权限管理模块分析 -
yzhw:
终于找到了
ImageSizer.java -
sunloveny:
国
struts国际化 -
jackotty:
谢谢楼主的分享
struts validator验证框架
在做完机构管理的业务逻辑之后,下面考虑呈现层的实现。
1、
首先规划一下页面的流程,从规划中得到总体的概念,并根据这些总体概念创建ActionForm/Action以及相关的配置文件,
这一步的目的,是保证程序能够正常运行!
2、
依次逐步深入地实现各个功能,从简单到复杂
本项目中重点理解:
MVC模式下的参数传输
Struts异常处理方案
public.js
1、
首先规划一下页面的流程,从规划中得到总体的概念,并根据这些总体概念创建ActionForm/Action以及相关的配置文件,
这一步的目的,是保证程序能够正常运行!
2、
依次逐步深入地实现各个功能,从简单到复杂
本项目中重点理解:
MVC模式下的参数传输
Struts异常处理方案
package com.bjsxt.oa.web; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; import org.apache.struts.action.ExceptionHandler; import org.apache.struts.config.ExceptionConfig; import com.bjsxt.oa.manager.SystemException; public class SystemExceptionHandler extends ExceptionHandler { @Override public ActionForward execute(Exception ex, ExceptionConfig ae, ActionMapping mapping, ActionForm formInstance, HttpServletRequest request, HttpServletResponse response) throws ServletException { // ActionForward forward = null; ActionMessage error = null; // Build the forward from the exception mapping if it exists // or from the form input if (ae.getPath() != null) { forward = new ActionForward(ae.getPath()); } else { forward = mapping.getInputForward(); } //处理SystemException异常 if(ex instanceof SystemException){ SystemException se = (SystemException)ex; String key = se.getKey(); if(key == null){ error = new ActionMessage(ae.getKey(),se.getMessage()); }else{ if(se.getValues() != null){ error = new ActionMessage(key,se.getValues()); }else{ error = new ActionMessage(key); } } this.storeException(request, key, error, forward, ae.getScope()); return forward; } return super.execute(ex, ae, mapping, formInstance, request, response); } }
package com.bjsxt.oa.manager; public class SystemException extends RuntimeException { private String key; private Object[] values; public String getKey() { return key; } public Object[] getValues() { return values; } public SystemException() { super(); } public SystemException(String message, Throwable throwable) { super(message, throwable); } public SystemException(String message) { super(message); } public SystemException(Throwable throwable) { super(throwable); } public SystemException(String key,String message) { super(message); this.key = key; } public SystemException(String key,Object value,String message) { super(message); this.key = key; this.values = new Object[]{value}; } public SystemException(String key,Object[] values,String message) { super(message); this.key = key; this.values = values; } }
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"> <struts-config> <form-beans> <form-bean name="orgForm" type="com.bjsxt.oa.web.forms.OrgActionForm"></form-bean> </form-beans> <global-exceptions> <exception path="/common/exception.jsp" handler="com.bjsxt.oa.web.SystemExceptionHandler" scope="request" key="errors.detail" type="java.lang.Exception"> </exception> </global-exceptions> <global-forwards> <forward name="pub_add_success" path="/common/pub_add_success.jsp"></forward> <forward name="pub_del_success" path="/common/pub_del_success.jsp"></forward> <forward name="pub_update_success" path="/common/pub_update_success.jsp"></forward> </global-forwards> <action-mappings> <action path="/org" type="org.springframework.web.struts.DelegatingActionProxy" name="orgForm" scope="request" parameter="method" > <forward name="index" path="/org/index.jsp"></forward> <forward name="add_input" path="/org/add_input.jsp"></forward> <forward name="update_input" path="/org/update_input.jsp"></forward> </action> </action-mappings> <message-resources parameter="MessageResources" /> </struts-config>
package com.bjsxt.oa.web.actions; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.beanutils.BeanUtils; import org.apache.struts.Globals; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; import org.apache.struts.action.ActionMessages; import org.apache.struts.actions.DispatchAction; import com.bjsxt.oa.manager.OrgManager; import com.bjsxt.oa.model.Organization; import com.bjsxt.oa.web.forms.OrgActionForm; public class OrgAction extends DispatchAction { private OrgManager orgManager; /** * 进入主界面 */ @Override protected ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // OrgActionForm oaf = (OrgActionForm)form; int parentId = oaf.getParentId(); List orgs = orgManager.searchOrgs(parentId); request.setAttribute("orgs", orgs); int ppid = 0; if(parentId != 0){ Organization parent = orgManager.findOrg(parentId); if(parent.getParent() != null){ ppid = parent.getParent().getId(); } } request.setAttribute("ppid", ppid); return mapping.findForward("index"); } /** * 打开添加界面 * @param mapping * @param form * @param request * @param response * @return * @throws Exception */ public ActionForward addInput(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { return mapping.findForward("add_input"); } //添加机构信息 public ActionForward add(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { OrgActionForm oaf = (OrgActionForm)form; Organization org = new Organization(); BeanUtils.copyProperties(org, oaf); orgManager.addOrg(org, oaf.getParentId()); return mapping.findForward("pub_add_success"); } public ActionForward del(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { OrgActionForm oaf = (OrgActionForm)form; int id = oaf.getId(); // try{ orgManager.delOrg(id); // }catch(Exception e){ // ActionMessages msgs = new ActionMessages(); // // ActionMessage msg = new ActionMessage() // // msgs.add("m", msg); //传输的是普通消息 // request.setAttribute(Globals.MESSAGES_KEY, msgs); // saveMessages(request, msgs); //传输的是错误消息 // request.setAttribute(Globals.ERROR_KEY, msgs); // saveErrors(request, msgs); // // return mapping.findForward("org_exception"); // } return mapping.findForward("pub_del_success"); } public ActionForward updateInput(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { return mapping.findForward("update_input"); } public ActionForward update(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { return mapping.findForward("pub_update_success"); } public void setOrgManager(OrgManager orgManager) { this.orgManager = orgManager; } }
public.js
/* * 打开新窗口 * f:链接地址 * n:窗口的名称 * w:窗口的宽度 * h:窗口的高度 * s:窗口是否有滚动条,1:有滚动条;0:没有滚动条 */ function openWin(f,n,w,h,s){ sb = s == "1" ? "1" : "0"; l = (screen.width - w)/2; t = (screen.height - h)/2; sFeatures = "left="+ l +",top="+ t +",height="+ h +",width="+ w + ",center=1,scrollbars=" + sb + ",status=0,directories=0,channelmode=0"; openwin = window.open(f , n , sFeatures ); if (!openwin.opener) openwin.opener = self; openwin.focus(); return openwin; } /* * 打开删除窗口 */ function openDeleteDialog(url,confirmString){ var c = confirmString; if(c == null || c == ''){ c = "你确认要删除记录吗?"; } if(confirm(c)){ return window.showModalDialog(url,"window123","dialogHeight:234px;dialogWidth:271px;resizable:no;help:yes;status:no;scroll:no"); } return false; } /* * 删除记录 */ function del(url,info){ if(openDeleteDialog(url,info)){ window.location.reload(true); } } /* * 校验checkbox */ function checkAll( chkName, checkboxName, pageSize ) { var src = event.srcElement; var chkN=eval("document.all."+chkName); if (src.checked) { chkN[0].checked = true; chkN[1].checked = true; for(var i=0; i<pageSize; i++) { var chk = eval("document.all." + checkboxName + i); if (chk) { chk.checked=true; } } } else { chkN[0].checked = false; chkN[1].checked = false; for(var i=0; i<pageSize; i++) { var chk = eval("document.all." + checkboxName + i); if(chk) { chk.checked=false; } } } } /* * */ function makePages(maxPage, selectedPage, selectName) { var sel=eval("document.all."+selectName); sel.length=0; for(var i=1; i<=maxPage; i++) { sel.options[i]=new Option(i,i); if(sel.options[i]==selectedPage) { sel.options[i].selected=true; } } } /* * 替换字符串 */ function replaceStr( str ) { var re="/( )/gi"; str = str.replace(re,""); re="/\</gi"; str = str.replace(re,"<"); return str; } /* * 去掉左边空格 */ function LTrim(str) { var whitespace = new String(" \t\n\r"); var s = new String(str); if (whitespace.indexOf(s.charAt(0)) != -1) { var j=0, i = s.length; while (j < i && whitespace.indexOf(s.charAt(j)) != -1) { j++; } s = s.substring(j, i); } return s; } /* * 去掉右边空格 */ function RTrim(str) { var whitespace = new String(" \t\n\r"); var s = new String(str); if (whitespace.indexOf(s.charAt(s.length-1)) != -1) { var i = s.length - 1; while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1) { i--; } s = s.substring(0, i+1); } return s; } /* * 去掉两边空格 */ function Trim(str) { return RTrim(LTrim(str)); } /* * */ function exeOperation( exePath ){ var obj = new ActiveXObject("Microsoft.XMLHTTP"); obj.open("post",exePath,false); obj.send(); var res = obj.responseText; var rs = Trim(res); if (rs.indexOf('true',0) != -1) { return true; } else { return false; } } /* * */ function exeValidate( exePath ){ var obj = new ActiveXObject("Microsoft.XMLHTTP"); obj.open("post",exePath,false); obj.send(); var res = obj.responseText; var rs = Trim(res); if (rs.indexOf('validate_login_user',0) != -1) { return true; } else { return false; } } /* * 显示 */ function validate_date( exePath ) { var obj = new ActiveXObject("Microsoft.XMLHTTP"); obj.open("post",exePath,false); obj.send(); var res = obj.responseText; var rs = Trim(res); var begin_str = "<!--begin-->"; var beginIndex = rs.indexOf(begin_str) + begin_str.length; var endIndex = rs.indexOf("<!--end-->"); rs = ((beginIndex >= 0) && (endIndex >= 0)) ? rs.substring(beginIndex,endIndex) : ""; return Trim(rs); } /* * 校验是否数字 */ function checkNumber(name, TempS) { for(Count=0;Count<TempS.length;Count++) { TempChar=TempS.substring(Count,Count+1); RefString="0123456789"; if (RefString.indexOf(TempChar,0)==-1) { alert("请输入数字"); eval("document.all." + name).focus(); return false; } } } /* * 是否有非法字符 */ function chksafe(a){ fibdn = new Array ("'" ,"\\"); i=fibdn.length; j=a.length; for (ii=0; ii<i; ii++) { for (jj=0; jj<j; jj++) { temp1=a.charAt(jj); temp2=fibdn[ii]; if (temp1==temp2){ return false; } } } return true; } /* * */ function fucCheckNUM(NUM){ var i,j,strTemp; strTemp="0123456789"; if ( NUM.length== 0) return false; for (i=0;i<NUM.length;i++) { j=strTemp.indexOf(NUM.charAt(i)); if (j==-1){ return false; } } return true; } /* * */ function fucCheckLength(strTemp) { var i,sum; sum=0; for(i=0;i<strTemp.length;i++) { if ((strTemp.charCodeAt(i)>=0) && (strTemp.charCodeAt(i)<=255)) { sum=sum+1; } else { sum=sum+2; } } return sum; } /* * */ function chkElements( name, errMsg, max_length, lengthMsg ) { var el_name = eval("document.all." + name); var v = el_name.value; if (!chksafe(v)) { el_name.focus(); alert(errMsg); return false; } else if (fucCheckLength(v) > max_length) { el_name.focus(); alert(lengthMsg); return false; } return true; } /* * 校验空字符串 */ function checkNullStr(name, msg) { var el_name = eval("document.all."+name); if (Trim(el_name.value).length==0) { alert(msg); el_name.focus(); return false; } return true; } /* * 显示日期控件 */ function GetDate(nText,para){ var v_url = para=="1"?"./common/data.html":"../../common/data.html"; var reVal = window.showModalDialog(v_url, 'data',"status:no;center:yes;scroll:no;resizable:no;dialogWidth:255px;dialogHeight:260px"); if (reVal != null) { var n = eval("document.all." + nText); n.value=reVal; } } /* * 按比例缩小图片 */ function DrawImage(ImgD,iwidth,iheight){ var flag=false; var image=new Image(); image.src=ImgD.src; if(image.width>0 && image.height>0){ flag=true; if(image.width/image.height>= iwidth/iheight){ if(image.width>iwidth){ ImgD.width=iwidth; ImgD.height=(image.height*iwidth)/image.width; }else{ ImgD.width=image.width; ImgD.height=image.height; } // ImgD.alt=image.width+"×"+image.height; }else{ if(image.height>iheight){ ImgD.height=iheight; ImgD.width=(image.width*iheight)/image.height; }else{ ImgD.width=image.width; ImgD.height=image.height; } // ImgD.alt=image.width+"×"+image.height; } } ImgD.style.visibility = "visible"; } /* * 回车键转为Tab键 */ function enterTab(){ if(event.keyCode==13){ oElement = document.activeElement; if(oElement.tagName != "TEXTAREA" && oElement.type != "button") event.keyCode=9; return ; } } /* * */ function objectEval(text) { text = text.replace(/\n/g, " "); text = text.replace(/\r/g, " "); if (text.match(/^\s*\{.*\}\s*$/)) { text = "[" + text + "]"; } return eval(text)[0]; } /* * 打开领导查询页面 * action - 查询的Action * method - 调用的方法 * title - 标题message * name - 员工选择域的name */ function openLeaderQuery(action,method,title,name){ openWin("../../common/selectStaff.jsp?action="+action+"&method="+method+"&title="+title+"&name="+name,"public_leader_find_page","400","150"); } /* * 第一行变色 */ function chgColor(){ var v_table = document.all["PowerTable"]; var v_row = v_table.rows[1]; var len = v_row.cells.length; for(var i=0;i<len;i++){ var v_cell = v_row.cells[i]; v_cell.style.backgroundColor = "yellow"; } } /* * 第一行变色 */ function chgColor2(){ var v_table = document.all["PowerTable"]; var rows_count=v_table.rows.length; var v_row,v_cell,temp_len,len; var rowspan=0; //get rowspan if (v_table.rows.length > 1) { len = v_table.rows[1].cells.length; for (var r=2; r < rows_count; r++) { v_row = v_table.rows[r]; temp_len = v_row.cells.length; if (temp_len==len) { rowspan=r-1; break; } } rowspan=(rowspan>0) ? (rowspan+1) : rows_count; for(var r=1; r < rowspan; r++) { v_row=v_table.rows[r]; for (var t=0; t < v_row.cells.length; t++) { v_cell = v_row.cells[t]; v_cell.style.backgroundColor = "yellow"; } } } } /* * 添加页面载入后触发的事件 */ function addLoadEvent(func) { var oldonload = window.onload; if (typeof(window.onload) != "function") { window.onload = func; } else { window.onload = function() { oldonload(); func(); } } } //adsName:名称,adsUrl:地址,sTime:时间(小时) add by wujie 2005.12.12 function PopAds(adsName,adsUrl,sTime,number,w,h,s) { if(document.cookie.indexOf(adsName)==-1) { window.open(adsUrl,adsName); self.focus(); var expireDate = new Date(); var lefttime = 1000 * (3600 * sTime); expireDate.setTime (expireDate.getTime() + lefttime); document.cookie = adsName +"=yes" + "; expires=" + expireDate.toGMTString() + ";"; } openWin(adsUrl,number,w,h,s); } document.onkeydown=enterTab;
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <%@include file="/common/common.jsp" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <link href="style/oa.css" rel="stylesheet" type="text/css"> <script language="javascript" src="script/public.js"></script> <title>添加机构信息</title> </head> <body> <center> <form action="org.do" method="post"> <TABLE class="tableEdit" border="0" cellspacing="1" cellpadding="0" style="width:580px;"> <TBODY> <TR> <!-- 这里是添加、编辑界面的标题 --> <td align="center" class="tdEditTitle">添加机构信息</TD> </TR> <TR> <td> <!-- 主输入域开始 --> <input type="hidden" name="method" value="add"> <input type="hidden" name="parentId" value="${orgForm.parentId }"> <table class="tableEdit" style="width:580px;" cellspacing="0" border="0" cellpadding="0"> <tr> <td class="tdEditLabel" >机构名称</td> <td class="tdEditContent"><input type="text" name="name"> </td> <td class="tdEditLabel" >机构描述</td> <td class="tdEditContent"><input type="text" name="description"></td> </tr> </table> <!-- 主输入域结束 --> </td> </TR> </TBODY> </TABLE> <TABLE> <TR align="center"> <TD colspan="3" bgcolor="#EFF3F7"> <input type="submit" name="saveButton" class="MyButton" value="保存机构信息"> <input type="button" class="MyButton" value="关闭窗口" onclick="window.close()"> </TD> </TR> </TABLE> </form> </center> </body> </html>
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <%@include file="/common/common.jsp" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <link href="style/oa.css" rel="stylesheet" type="text/css"> <script language="javascript" src="script/public.js"></script> <title>人员管理</title> </head> <BODY bgColor=#dee7ff leftMargin=0 background="" topMargin=0 marginheight="0" marginwidth="0"> <center> <TABLE width="778" border=0 cellPadding=0 cellSpacing=0 borderColor=#ffffff bgColor=#dee7ff style="FONT-SIZE: 10pt"> <TBODY> <TR height=35> <TD align=middle width=20 background=images/title_left.gif bgColor=#dee7ff></TD> <TD align=middle width=120 background=images/title_left.gif bgColor=#dee7ff><FONT color=#f7f7f7> 机构管理<font color="#FFFFFF"> </font></FONT> </TD> <TD align=middle width=11 background=images/title_middle.gif bgColor=#dee7ff><FONT color=#f7f7f7> </FONT> </TD> <TD align=middle background=images/title_right.gif bgColor=#dee7ff><FONT color=#f7f7f7> </FONT> </TD> </TR> </TBODY> </TABLE> <TABLE width="778" border=0 align=center cellPadding=0 cellSpacing=0 borderColor=#ffffff style="FONT-SIZE: 10pt"> <TBODY> <TR> <TD width="82%" height=14 align=right vAlign=center noWrap> </TD> <TD width="18%" align=right vAlign=center noWrap> </TD> </TR> <TR> <TD height=14 align=right vAlign=center noWrap> <!-- 在这里插入查询表单 --> </TD> <TD height=14 align="left" vAlign=center noWrap> <% /** * 在这里定义“添加”,“查询”等按钮 * <input type="image" name="find" value="find" src="images/cz.gif"> * * <a href="#" onClick="BeginOut('document.do?method=addInput','470')"> * <img src="images/addpic.gif" border=0 align=absMiddle style="CURSOR: hand"></a> */ %> <a href="#" onclick="openWin('org.do?method=addInput&parentId=${orgForm.parentId }','addperson',600,200);">添加机构信息</a> <a href="org.do?parentId=${ppid }">返回</a> </TD> </TR> <TR> <TD height=28 colspan="2" align=right vAlign=center noWrap background=images/list_middle.jpg> <!-- 可以在这里插入分页导航条 --> </TD> </TR> </TBODY> </TABLE> <table width="778" border="0" cellPadding="0" cellSpacing="1" bgcolor="#6386d6"> <!-- 列表标题栏 --> <tr bgcolor="#EFF3F7" class="TableBody1"> <td width="5%" height="37" align="center"><b>序号</b></td> <td width="18%" height="37" align="center"><B>机构名称</B></td> <td width="18%" height="37" align="center"><b>机构编号</b></td> <td width="18%" height="37" align="center"><b>父机构名称</b></td> <td width="5%" height="37" align="center"><b>操作</b></td> </tr> <!-- 列表数据栏 --> <c:if test="${!empty orgs}"> <c:forEach items="${orgs }" var="org"> <tr bgcolor="#EFF3F7" class="TableBody1" onmouseover="this.bgColor = '#DEE7FF';" onmouseout="this.bgColor='#EFF3F7';"> <td align="center" vAlign="center">${org.id }</td> <td align="center" vAlign="center"><a href="org.do?parentId=${org.id }">${org.name }</a></td> <td align="center" vAlign="center">${org.sn }</td> <td align="center" vAlign="center">${org.parent.name }</td> <td align="center" vAlign="center"> <a href="#" onclick="del('org.do?method=del&id=${org.id }')">删除</a> </td> </tr> </c:forEach> </c:if> <!-- 在列表数据为空的时候,要显示的提示信息 --> <c:if test="${empty orgs}"> <tr> <td colspan="7" align="center" bgcolor="#EFF3F7" class="TableBody1" onmouseover="this.bgColor = '#DEE7FF';" onmouseout="this.bgColor='#EFF3F7';"> 没有找到相应的记录 </td> </tr> </c:if> </table> <TABLE width="778" border=0 align=center cellPadding=0 cellSpacing=0 borderColor=#ffffff style="FONT-SIZE: 10pt"> <TBODY> <TR> <TD height=28 align=right vAlign=center noWrap background=images/list_middle.jpg> <!-- 可以在这里插入分页导航条 --> </TD> </TR> </TBODY> </TABLE> </center> </body> </html>
发表评论
-
oa_22
2009-02-04 22:20 1817oa_22: 结合Freemarker,将动态表单显示在公文 ... -
oa_21
2009-02-04 22:18 1222oa_21: 添加动态表单呈现层代码 - 理解批量数据的 ... -
oa_20
2009-02-04 22:15 1294oa_20: 1、创建动态表单的领域模型 FieldInp ... -
oa_18
2009-02-04 22:07 866oa_18: 实现WorkflowManager接口,以及流 ... -
oa_17
2009-02-04 22:03 1229集成JBPM到OA系统,并实现JbpmFacade接口 - ... -
oa_16
2009-02-04 21:58 949oa_16: 根据用例分析的结果,创建WorkflowMan ... -
oa_15:
2009-02-04 21:55 889oa_15: 根据公文流转领域模型创建相关的实体类,并使用x ... -
oa_14
2009-02-04 21:51 1338利用JSTL函数实现即时认证 - SecurityFunc ... -
oa_13
2009-02-04 21:35 1393oa_13: 实现登录功能 - LoginAction ... -
oa_11
2009-02-04 20:51 919初步实现授权管理的界面,重点在于: 1、理解DWR如何使用,理 ... -
oa_10
2009-01-18 12:54 1136提供初始化数据的代码 ... -
oa_09
2009-01-18 12:48 1780提供人员管理、模块管理、角色管理、用户管理相关的代码。 同时 ... -
oa_08
2009-01-18 12:08 1066创建AclManager接口,并实现 - 理解权限管理子系统 ... -
oa_07
2009-01-18 11:54 1290引入Ant和Xdoclet的支持, ... -
oa_06
2009-01-18 11:48 1059利用ThreadLocal实现分页参数的透明传输(通过使用Th ... -
oa_05
2009-01-18 11:41 988从现有的分页处理方案中,抽象出AbstractManager, ... -
oa_04
2009-01-18 11:30 1173利用Pager-Taglib实现机构 ... -
oa_02
2009-01-18 11:05 1026整合Spring和Hibernate之后,对于业务逻辑类的测试 ... -
oa_01+
2009-01-18 10:55 1242package com.bjsxt.oa.manager.im ... -
oa_01
2009-01-18 10:48 1281oa_01: 1、建立机构管理的实体类,并映射【重点理解多对 ...
相关推荐
这个名为"oa_03.rar"的压缩包文件很可能包含了一个简易的OA系统的源代码、配置文件、数据库脚本以及其他相关资源。下面将详细讨论OA管理系统的核心组件和常见功能,以及可能涉及到的技术栈。 OA系统通常由以下几个...
在这个"oa_03"中,可能包含了Struts2的配置文件、Action类、DAO实现、数据库连接配置、JDBC相关的SQL脚本等。分析和学习这些文件,可以深入理解Struts2如何处理请求,以及JDBC如何实现数据库操作。 总的来说,"oa...
压缩包文件"oa_gl_03_1"可能包含的是通达OA系统的一个特定版本或模块,如“OA-财务管理模块3.1”。这个模块可能包括了财务管理相关的功能,如账务处理、预算控制、财务报表等。具体的功能细节和使用方法需要进一步...
例如,提供的文件"SIMATIC-WinCC-OA_V3.19_compatibility-list_zh_2023-03-29.xlsx"和"SIMATIC-WinCC-OA_V3.18_compatibility-list_zh_2022-11-17.xlsx"分别对应了2023年3月29日和2022年11月17日的WinCC OA V3.19和V...
3、安装完,在OA服务管理器(MYOA\BIN\monitor.exe)中关闭所有OA服务,并退出服务控制器monitor.exe。 4、替换补丁中bin和webroot里的文件。直接复制粘贴就可以。 5、到D:\MYOA\BIN目录运行monitor.exe 并启动OA所有...
【oa_gl_03_2】这个文件名称可能暗示了这是一个关于“财务”或“管理”的模块,可能是系统中的财务管理或者企业管理部分的代码或配置文件,这部分可能涉及到财务审批流程、预算管理、成本分析等功能。 总结来说,...
资源名称:Java就业班OA项目实战培训视频【12讲】资源目录:【】Java就业班OA项目实战01【】Java就业班OA项目实战02【】Java就业班OA项目实战03【】Java就业班OA项目实战04【】Java就业班OA项目实战05【】Java就业班...
绝对能用的通达OA2013版原版+破解版+OA精灵+IM1000用户补丁。 这是从麦枫和富阳上搜集的资料,汇总整合的。 现在好多破解版都不提供原版,以至于根本就不能用。本人经反复测试。这个绝对能用。 经过破解后,通达...
安装原版通达OA2015试用版,通达官网下载。 下载此破解补丁,解压并覆盖myoa/webroot,即可! 软件名称: Office Anywhere 2015版 皇冠集群版 对应版本的说明 版权所有: 北京通达信科科技有限公司 ...
安装原版通达OA2015试用版,通达官网下载。 下载此破解补丁,解压并覆盖myoa/webroot,即可! 软件名称: Office Anywhere 2015版 皇冠集群版 对应版本的说明 版权所有: 北京通达信科科技有限公司 ...
"2007-03-27.dmp"可能是Oracle数据库的导出文件,通常用于数据库备份或迁移。而"WebOA.rar"是一个压缩文件,可能包含OA系统的源代码、配置文件、静态资源等,开发者可以解压后进行系统部署或二次开发。 总的来说,...
5、通达OA 精灵版本:最新版本号 2011-03-14(去除通达官方信息及链接,已封装,安装即可) 6、守护服务程序:最新版本号 2010-12-16 7、通达报表组件版本3.0完美zcj,同时考虑到有些OA版本原因,特免费赠送“通达...
绝对能用的通达OA2013版原版+破解版+OA精灵+IM1000用户补丁。 这是从麦枫和富阳上搜集的资料,汇总整合的。 现在好多破解版都不提供原版,以至于根本就不能用。本人经反复测试。这个绝对能用。 经过破解后,通达...
5、 定时任务服务版本:最新版本号 2010-12-03补丁 6、 守护服务程序:最新版本号 2010-12-16 7、 通达服务控制中心及自动配置程序:最新版本号 2010-12-16 8、 通达手机短信服务器2010版:最新版本号 2011-05-23...
5、 定时任务服务版本:最新版本号 2010-12-03补丁 6、 守护服务程序:最新版本号 2010-12-16 7、 通达服务控制中心及自动配置程序:最新版本号 2010-12-16 8、 通达手机短信服务器2010版:最新版本号 2011-05-23...
北大青鸟 Accp 5.0 电子课件 Y2 HR CRM OA B2C毕业设计项目开发(HR CRM OA B2C Project) 共计15个压缩包,需要全部下载才能解压.
泛微e-cology OA系统远程代码执行批量检测脚本泛微e-cology OA系统远程代码执行批量检测脚本
5、通达OA 精灵版本:最新版本号 2011-03-14(去除通达官方信息及链接,已封装,安装即可) 6、守护服务程序:最新版本号 2010-12-16 7、通达报表组件版本3.0完美zcj,同时考虑到有些OA版本原因,特免费赠送“通达...
5、 定时任务服务版本:最新版本号 2010-12-03补丁) k) 6、 守护服务程序:最新版本号 2010-12-16 7、 通达服务控制中心及自动配置程序:最新版本号 2010-12-16 8、 通达手机短信服务器2010版:最新版本号 2011-05-...
5、 定时任务服务版本:最新版本号 2010-12-03补丁 6、 守护服务程序:最新版本号 2010-12-16 7、 通达服务控制中心及自动配置程序:最新版本号 2010-12-16 8、 通达手机短信服务器2010版:最新版本号 2011-01-17...