文章目录
一、开发准备
二、开发环境搭建
步骤1:从服务器上拷贝WEAVER/ecology代码
步骤2:把本地代码导入到myeclipse工程中
步骤3:配置ecology项目环境
步骤4:修改ecology项目中数据库配置文件
步骤5:Resin配置文件
步骤6:启动运行
三、Ecology8系统里一个jsp页面通常需要包含什么内容
1、相关的操作的类、jsp标签、样式等
2、右键菜单
3、多语言标签
4、操作权限
四、E8控件说明
Tab组件
浏览框组件-标签
表单布局组件
可编辑表格
分页控件
Java验证复选框代码:
弹出框组件
右键菜单
weaverTree树形组件
日期控件
扩展日期控件
开关组件
五、OA流程自定义接口
一、开发准备
Ecology系统说明 :
ecology8.0文件页面编码为UTF-8
ecology8.0 JDK版本 1.6
ecology8.0 应用服务器为Resin
Ecology安装目录说明:
ecology:OA主程序目录
JDK:Java目录
Resin:应用服务器的目录
ecology主要目录说明: ecology
classbean 存放编译后的CLASS文件
js 系统中使用的JAVASCRIPT和VBSCRIPT脚本
css 系统中JSP页面使用的样式
images
images_face
images_frame 系统中使用的图片的存放目录
log 系统中日志存放目录
sqlupgrade升级SQL脚本目录
workflow 各功能分文件夹存放每个功能的文件
WEB-INF
lib 系统依赖Jar文件目录
prop 系统配置文件存放
service 系统的接口配置文件的存放
securitylog 安全补丁日志
securityXML自定义安全补丁配置目录
二、开发环境搭建
步骤1:从服务器上拷贝WEAVER/ecology代码
从服务器拷贝ecology相关代码到本地,目录服务器上文件如下图,需拷贝ecology、Resin,如果本机已安装JDK则可以不需拷贝JDK
步骤2:把本地代码导入到myeclipse工程中
点击Finish , 之后项目会build project建立索引会有很长一段时间的等待。
步骤3:配置ecology项目环境
配置Resin 3.x
配置Ecology所需的JDK
点击Add JAR/ZIP 加入Resin->lib目录下所有的jar包
步骤4:修改ecology项目中数据库配置文件
请一定要记得修改数据库配置文件中的数据库配置
配置文件:D:/weaver/ecology/WEB-INF/prop/weaver.properties
SQLServer数据库:
步骤5:Resin配置文件
配置文件Resin/conf/resin.conf配置ecology8所在目录。root-directory为本地ecology8的路径。 修改默认Resin服务监听端口
步骤6:启动运行
点击应用服务Resin3–Star
Console控制台出现以下信息,则代表启动成功!
三、Ecology8系统里一个jsp页面通常需要包含什么内容
• 相关的操作的类、JSP标签、样式等 • 右键菜单 • 多语言标签 • 操作权限
1、相关的操作的类、jsp标签、样式等
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ page import="weaver.general.Util,weaver.hrm.common.*,weaver.conn.*" %>
<%@ page import="weaver.file.*,net.sf.json.*,java.util.*,java.text.*,weaver.common.DataBook" %>
<%@ include file="/systeminfo/init_wev8.jsp" %>
<%@ taglib uri="/WEB-INF/weaver.tld" prefix="wea"%>
<%@ taglib uri="/browserTag" prefix="brow"%>
< script language = javascript src = " /js/ecology8/docs/docSearchInit_wev8.js" > script> < !—高级搜索-->
2、右键菜单
<%@ include file="/systeminfo/RightClickMenuConent_wev8.jsp" %>
<%
if(HrmUserVarify.checkUserRight("HrmCountriesAdd:Add", user)){ //判断是否有对应的权限,有则显示该菜单
RCMenu += "{"+SystemEnv.getHtmlLabelName(82,user.getLanguage())+",javascript:doAdd();,_self} " ;
/*标签显示菜单名,如 82 为新增*/
RCMenuHeight += RCMenuHeightStep;
}
%>
<%@ include file="/systeminfo/RightClickMenu_w3ev8.jsp" %>
3、多语言标签
<%=SystemEnv.getHtmlLabelName(21995,user.getLanguage())%>
这样的形式来表示,其中的数字21995,就是表示高级搜索 ,同时可以通过
select labelname from htmllabelinfo where indexid= 21995 and languageid= 7
来获取到“高级搜索”这个显示名称;
languageid=7表示中文显示名称,
languageid=8表示英文显示名称,
languageid=9表示繁体显示名称.
?? 如何在数据中添加多语言版本的标签 ?? 举个栗子: 添加的标签请使用负的ID,这样可以不与之前的标签产生冲突,方便后期维护升级,ID值通过sql获取
Select min ( id) - 1 from HtmlLabelIndex
delete from HtmlLabelIndex where id= - 11705
GO
delete from HtmlLabelInfo where indexid= - 11705
GO
INSERT INTO HtmlLabelIndex values ( - 11705 , ‘多语言标签’)
GO
INSERT INTO HtmlLabelInfo VALUES ( - 11705 , ‘多语言标签’, 7 )
GO
INSERT INTO HtmlLabelInfo VALUES ( - 11705 , ’ Multilingual label ', 8 )
GO
INSERT INTO HtmlLabelInfo VALUES ( - 11705 , ‘多語言標簽’, 9 )
GO
4、操作权限
通过sql先在数据库添加一个需要的权限
delete from SystemRightDetail where rightid = - 1031
GO
delete from SystemRightsLanguage where id = - 1031
GO
delete from SystemRights where id = - 1031
GO
insert into SystemRights ( id, rightdesc, righttype) values ( - 1031 , ‘合同管理’, ‘7 ’)
GO
insert into SystemRightsLanguage ( id, languageid, rightname, rightdesc) values ( - 1031 , 9 , ‘合同管理’, ‘合同管理’)
GO
insert into SystemRightsLanguage ( id, languageid, rightname, rightdesc) values ( - 1031 , 8 , ‘oaproject contractManage’, ‘oaproject contractManage’)
GO
insert into SystemRightsLanguage ( id, languageid, rightname, rightdesc) values ( - 1031 , 7 , ‘合同管理’, ‘合同管理’)
GO
insert into SystemRightDetail ( id, rightdetailname, rightdetail, rightid) values ( - 1031 , ‘合同管理’, ‘oaproject_contractManage’, - 1031 )
GO
在要需要控制权限的jsp页面上加上以下的代码就可以
<%@ include file="/systeminfo/init.jsp" %>
<%
if(!HrmUserVarify.checkUserRight(“oaproject_contractManage “, user) ) {
response.sendRedirect(”/notice/noright.jsp”);
return;
}
%>
四、E8控件说明
Tab组件
效果图: 实现方式有以下两种:
Iframe形式引用:
$ ( function ( ) {
$ ( '.e8_box' ) . Tabs ( {
getLine: 1 ,
iframe: "tabcontentframe" ,
mouldID: "<%= MouldIDConst.getID(" formmode")%>" ,
staticOnLoad: true ,
objName: "供货记录"
} ) ;
} ) ;
非Iframe形式引用:
< jsp: include page = " /systeminfo/commonTabHead.jsp" >
< jsp: param name = " mouldID" value = " formmode " /> //指定图标id
< jsp: param name = " navName" value = " 供货记录" /> //指定显示的名称
jsp: include>
< jsp: include page = " /systeminfo/commonTabFoot.jsp" > jsp: include>
所需引入js
浏览框组件-标签
效果图:
所需引入js:
<%@ taglib uri="/WEB-INF/tld/browser.tld" prefix=“brow”%>
常用属性说明:
name=“workflowid” //浏览框的id和name
viewType=“0” //字段类型(0:主表字段,1:明细表字段) 用于流程中,该属性非必要
hasBrowser=“true” //显示放大镜
hasAdd=“false” //显示添加按钮
browserUrl="/systeminfo/BrowserMain.jsp?url=/workflow/workflow/WorkflowBrowser_frm.jsp" //浏览框打开的页面地址
isMustInput=“2” //是否必填 字段是否必填(默认是0) 2:必填
isSingle=“true” //是否单选
hasInput=“true” //是否显示输入框
completeUrl="/data.jsp?type=workflowBrowser&isTemplate=0" //自动联想的地址
width=“300px” //浏览框的宽度
browserValue="" //默认浏览框隐藏域的值
browserSpanValue=""//默认浏览框显示的值
onPropertyChange="" //浏览按钮对应的隐藏域的触发的onpropertychange事件调用的方法
_callback=""//执行完browserUrl事件后的回调方法,该方法默认传递四个参数(event,datas,name,_callbackParams)
_callbackParams=""//_callback所需要的参数
/>
单人员浏览框(最多只能选择一个人员)例:
< brow: browser viewType = " 0" id = " pName" name = " pName" browserValue = " "
browserUrl = " /systeminfo/BrowserMain.jsp?url=/hrm/resource/ResourceBrowser.jsp?selectedids="
hasInput = " true"
isSingle = " true"
hasBrowser = " true"
isMustInput = ' 1'
completeUrl = " /data.jsp"
linkUrl = " javascript:openhrm($id$)" width = " 165px" browserSpanValue = " " />
多人员浏览框(可以选择多个人员)例:
< brow: browser name = " userid" viewType = " 0" hasBrowser = " true" hasAdd = " false"
browserUrl = ' <%=" /systeminfo/BrowserMain.jsp?url=/hrm/resource/MutiResourceBrowser.jsp" %>'
isMustInput = " 2" isSingle = " false" hasInput = " true" completeUrl = " /data.jsp?type=1"
width = " 300px" browserValue = ' ' browserSpanValue = ' ' />
表单布局组件
效果图: 点击查询条件2后面的箭头显示如下: 是否显示,控制不同的item和group显示或者隐藏 注意:
wea:layout, wea:group, wea:item都必须成对出现。
wea:layout: 表示一个完整的布局,页面上可以出现多个布局。
wea:group: 必须嵌套在wea:layout中使用,表示布局的一个组,类似于table
wea:item: 必须嵌套在wea:group中使用,表示布局中某个组里的一个单元格,类似td
所需标签:
<%@ taglib uri="/WEB-INF/weaver.tld" prefix="wea" %>
<%@ include file="/systeminfo/init_wev8.jsp" %>
<%@ taglib uri="/WEB-INF/tld/browser.tld" prefix="brow" %>
例子:
< wea: layout type = " fourCol" >
< wea: group context = " 常用条件" attributes = " {' class' :\"e8_title e8_title_1\",' samePair' :' showgroup' }" >
< wea: item> 标题wea: item>
< wea: item>
< wea: required id = " aaspan" required = " true" >
< input type = " text" name = " aa" id = " aa" /> wea: required>
wea: item>
< wea: item> 编号wea: item>
< wea: item>
< input type = " text" name = " bb" id = " bb" value = " b" />
wea: item>
< wea: item> 创建日期wea: item>
< wea: item attributes = " {\"colspan\":\"3\"}" >
< select class = " inputStyle" name = " ccc" id = " ccc" >
< option value = " " > 全部 option>
< option value = " 1" > 今天 option>
< option value = " 2" > 本周 option>
< option value = " 3" > 本月 option>
select>
wea: item>
< wea: item> 批准日期wea: item>
< wea: item>
< select name = " ccc" id = " ccc" >
< option value = " " > 全部 option>
< option value = " 1" > 今天 option>
< option value = " 2" > 本周 option>
< option value = " 3" > 本月 option>
select> wea: item>
wea: group>
< wea: group context = " 查询条件2"
attributes = " {' class' :\"e8_title e8_title_1\",' groupDisplay' :' ' ,' itemAreaDisplay' :' none' }" >
< wea: item> 标题wea: item>
< wea: item>
< wea: required id = " aaspan" required = " true" >
< input type = " text" name = " aa" id = " aa" />
wea: required>
wea: item>
< wea: item> 人员wea: item>
< wea: item>
< brow: browser viewType = " 0" id = " pName" name = " pName" browserValue = " "
browserUrl = " /systeminfo/BrowserMain.jsp?url=/hrm/resource/ResourceBrowser.jsp?selectedids="
hasInput = " true" isSingle = " true" hasBrowser = " true" isMustInput = ' 1' completeUrl = " /data.jsp"
linkUrl = " javascript:openhrm($id$)" width = " 165px" browserSpanValue = " " />
wea: item>
< wea: item> 是否显示wea: item>
< wea: item attributes = " {\"colspan\":\"3\"}" >
< select class = " inputStyle" name = " isshow" id = " isshow" onchange = " Onchange(this)" >
< option value = " 0" > 显示 option>
< option value = " 1" > 不显示 option>
< option value = " 2" > 常用条件不显示 option>
select> wea: item>
< wea: item attributes = " {' samePair' :' showdiv' }" > 批准日期wea: item>
< wea: item attributes = " {' samePair' :' showdiv' }" >
< select name = " ccc" id = " ccc" >
< option value = " " > 全部 option>
< option value = " 1" > 今天 option>
< option value = " 2" > 本周 option>
< option value = " 3" > 本月 option>
select>
wea: item>
wea: group>
wea: layout>
< script type = " text/javascript" >
function Onchange ( obj) {
if ( obj. value == "0" ) {
showEle ( "showdiv" , "true" ) ;
showGroup ( "showgroup" , "true" ) ;
group
} else if ( obj. value == "1" ) {
hideEle ( "showdiv" , "true" ) ;
} else if ( obj. value == "2" ) {
hideGroup ( "showgroup" , "true" ) ;
}
}
script>
可编辑表格
效果图: 所需js:
示例:
< script type= "text/javascript" >
var groupAction = null ;
jQuery ( document) . ready ( function ( ) {
var initjsondatas = [ [ { 'name' : 'id' , 'value' : '11' , 'iseditable' : 'true' , 'type' : 'checkbox' } ,
{ 'name' : 'fieldid' , 'value' : '3' , 'label' : '程序媛' , 'iseditable' : 'true' , 'type' : 'browser' } ,
{ 'name' : 'wb' , 'value' : '程序媛' , 'iseditable' : true , 'type' : 'input' } ,
{ 'name' : 'xlk' , 'value' : '1' , 'iseditable' : true , 'type' : 'select' } ,
{ 'name' : 'orderid' , 'value' : '1' , 'iseditable' : true , 'type' : 'input' }
] , [ { 'name' : 'id' , 'value' : '12' , 'iseditable' : 'true' , 'type' : 'checkbox' } ,
{ 'name' : 'fieldid' , 'value' : '14' , 'label' : 'cjr' , 'iseditable' : true , 'type' : 'browser' } ,
{ 'name' : 'wb' , 'value' : 'cjr' , 'iseditable' : true , 'type' : 'input' } ,
{ 'name' : 'xlk' , 'value' : '2' , 'iseditable' : true , 'type' : 'select' } ,
{ 'name' : 'orderid' , 'value' : '2' , 'iseditable' : 'true' , 'type' : 'input' } ] ]
var item_browser = " " ;
var items= [
{ width: "10%" , colname: "浏览按钮\"> " , itemhtml: item_browser} ,
{ width: "20%" , colname: "文本框" , itemhtml: " " } ,
{ width: "20%" , colname: "下拉框" , itemhtml: "全部 AA BB " } ,
{ width: "20%" , display: 'none' , colname: "排序" , itemhtml: " " }
] ;
var option = {
basictitle: "可编辑表格标题。。。" ,
optionHeadDisplay: "none" ,
colItems: items,
container: "#FieldList" ,
configCheckBox: true ,
usesimpledata: true ,
initdatas: initjsondatas,
canDrag: true ,
orderField: 'orderid' ,
checkBoxItem: { "itemhtml" : ' ' , width: "5%" }
} ;
groupAction= new WeaverEditTable ( option) ;
jQuery ( "#FieldList" ) . append ( groupAction. getContainer ( ) ) ;
} ) ;
function deleteAction ( ) {
groupAction. deleteRows ( ) ;
}
< / script>
< / wea: item>
< / wea: group>
< / wea: layout>
分页控件
效果图:
所需js:
<%@ taglib uri="/WEB-INF/weaver.tld" prefix=“wea”%>
方式1.查询数据表示例:
< form action = " demo_edittableoperation.jsp" method = " post" id = " weaver" name = " weaver" > < wea: layout type = " fourCol" >
< wea: group context = " 数据列表" >
< wea: item attributes = " {' isTableList' :' true' ,' colspan' :' full' }" >
<% String orderby = " id "; //排序字段
String tableString = ""; //定义表格xml数据
String backfields = " * "; //查询的字段
String fromSql = " HrmResource ";//查询的表名或者视图名
String sqlWhere = " 1=1 "; //查询条件
tableString = " " + //指定分页条数和初始化id以及是否有复选框
" " +//用于控制checkbox 框是否可用
" " + " " +
" < head> " +
" " +
" " +
" " +
" head> " +
" < operates> " +//相关操作
" popedom> " +//用于控制操作菜单是否可用,返回的ArrayList的序列对应下面的index
" " +
" " + " " +
" operates> " +
" table> "; %>
< wea: SplitPageTag tableString = ' <%=tableString%>' mode = " run" /> wea: item>
wea: group> wea: layout> form>
Java验证复选框代码:
/**
* 获取复选框能否被选中
* @param id
* @return
*/
public String getCanCheck(String id) {
if (Util.getIntValue(id) % 2 == 0) {
return "true";//返回true 标识复选框可选
} else {
return "false";//表示复选框不可选,进行隐藏复选框
}
}
/**
* 获取能不能进行操作,进行权限判断
* @param id
* @param userid
* @return
*/
public ArrayList getCanOperation(String id, String userid) {
ArrayList resultlist = new ArrayList();
resultlist.add("true"); //对应第一个操作显示
resultlist.add("true"); //对应第二个操作显示,false表示不显示
return resultlist;
}
方式2.查询外部数据示例:
< form action = " demo_edittableoperation.jsp" method = " post" id = " weaver" name = " weaver" > < wea: layout type = " fourCol" >
< wea: group context = " 数据列表" >
< wea: item attributes = " {' isTableList' :' true' ,' colspan' :' full' }" >
<% String tableString = ""; //定义表格xml数据
// 指定分页条数和初始化id以及是否有复选框 以及数据来源 datasource表示数据来源 sourceparams表示传入参数参数格式为"name:value+name1:value1"多个参数用加号连接
tableString = " " + " " +//用于控制checkbox 框是否可用
" " +
" < head> " + " " +
" " +
" " +
" head> " +
" < operates> " +//相关操作
" popedom> " +//用于控制操作菜单是否可用
" " +
" " +
" operates> " +
" table> ";
%>
< wea: SplitPageTag tableString = ' <%=tableString%>' mode = " run" /> wea: item>
wea: group> wea: layout> form>
Java封装数据如下:
public List< Map< String, String> > getDemoData ( User user, Map< String, String> otherparams, HttpServletRequest request, HttpServletResponse response) {
List< Map< String, String> > data = new ArrayList < Map< String, String> > ( ) ;
String loginid = otherparams. get ( "loginid" ) ;
RecordSet rs = new RecordSet ( ) ;
rs. executeSql ( "select * from HrmResource" ) ;
while ( rs. next ( ) ) {
Map< String, String> d = new HashMap < String, String> ( ) ;
d. put ( "id" , rs. getString ( "id" ) ) ;
d. put ( "lastname" , Util. null2String ( rs. getString ( "lastname" ) ) ) ;
d. put ( "loginid" , Util. null2String ( rs. getString ( "loginid" ) ) ) ;
data. add ( d) ;
}
rs. writeLog ( "getDemoData 传入参数::" + loginid) ;
return data;
}
弹出框组件
效果图: 从父页面打开弹窗
引用:
< script language= "javascript" src= "/wui/theme/ecology8/jquery/js/zDialog_wev8.js" > < / script>
参考代码:
< script language= "javascript" type= "text/javascript" >
function openDialog ( title, url) {
var dlg = new window. top. Dialog ( ) ;
dialog. currentWindow = window;
dlg. Model = true ;
dlg. Width = 500 ;
dlg. Height = 400 ;
dlg. URL = url;
dlg. Title = title;
dlg. show ( ) ;
}
< / script>
在弹出框获取相关对象 //在被打开的页面中,使用如下语句获取父窗口对象: parentWin = parent.getParentWindow(window); //在被打开的页面中,使用如下语句获取Dialog对象: dialog = parent.getDialog(window); 具体示例:
function openDialog ( ) {
var dlg = new window. top. Dialog ( ) ;
dlg. currentWindow = window;
dlg. Model = false ;
dlg. Width = 1060 ;
dlg. Height = 500 ;
dlg. URL = "/gsoa/oaproject/demo.jsp" ;
dlg. Title = "新建数据" ;
dlg. maxiumnable = true ;
dlg. show ( ) ;
window. dialog = dlg;
}
右键菜单
效果图:
示例:
<%@ include file="/systeminfo/RightClickMenuConent_wev8.jsp" %>
<%
RCMenu += "{提交表单,javascript:doSubmit(),_self} ";
RCMenuHeight += RCMenuHeightStep;
RCMenu += "{返回,/main.jsp,_self} ";
RCMenuHeight += RCMenuHeightStep;
%>
<%@ include file="/systeminfo/RightClickMenu_wev8.jsp" %>
其中上下两行include 为固定格式
weaverTree树形组件
效果图: 所需引入js:
< link rel = " stylesheet" href = " /css/ecology8/request/leftNumMenu_wev8.css" type = " text/css" />
< script type = " text/javascript" src = " /js/ecology8/request/leftNumMenu_wev8.js" > script>
< link rel = " stylesheet" href = " /wui/common/jquery/plugin/zTree/css/zTreeStyle/zTreeStyle_wev8.css" type = " text/css" >
< script type = " text/javascript" src = " /wui/common/jquery/plugin/zTree/js/jquery.ztree.core_wev8.js" > script>
<%@ include file="/systeminfo/leftMenuCommon.jsp" %>
必须包含头部声明
显示区域
< div class = " zDialog_div_content" >
< table cellspacing = " 0" cellpadding = " 0" class = " flowsTable" style =" width : 100%; height : 100%; " >
< tr>
< td class = " leftTypeSearch" >
< div>
< span class = " leftType" onclick = " reload()" > 菜单分类< span id = " totalDoc" > span> span>
< span class = " leftSearchSpan" >
< input type = " text" class = " leftSearchInput" style =" width : 110px; " />
span>
div>
td>
< td rowspan = " 2" > td>
tr>
< tr>
< td style =" width : 23%; " class = " flowMenusTd" >
< div class = " flowMenuDiv" >
< div class = " ulDiv" >
< div id = " deeptree" class = " cxtree" CfgXMLSrc = " /css/TreeConfig.xml" style =" overflow : hidden; " >
div>
div>
td>
tr>
table>
DIV>
树形组件数据和脚本
< script type= "text/javascript" >
var demoLeftMenus= [
{
name: "一级菜单01" ,
attr: {
typeid: "01"
} ,
submenus: [
{
name: "二级类型0101" ,
attr: {
workflowid: "0101" ,
nodeids: "87654321"
} ,
numbers: {
flowNew: "1" ,
flowResponse: "0" ,
flowOut: "0" ,
flowAll: "7"
}
}
] ,
numbers: {
flowNew: "1" ,
flowResponse: "0" ,
flowOut: "0" ,
flowAll: "7"
}
}
,
{
name: "一级菜单02" ,
attr: {
typeid: "02"
} ,
submenus: [
{
name: "二级菜单0201" ,
attr: {
workflowid: "0201" ,
nodeids: ""
} ,
numbers: {
flowNew: "0" ,
flowResponse: "0" ,
flowOut: "0" ,
flowAll: "3"
}
} ,
{
name: "二级菜单0202" ,
attr: {
workflowid: "0202" ,
nodeids: ""
} ,
numbers: {
flowNew: "0" ,
flowResponse: "0" ,
flowOut: "0" ,
flowAll: "2"
}
}
] ,
numbers: {
flowNew: "5" ,
flowResponse: "0" ,
flowOut: "0" ,
flowAll: "17"
}
}
] ;
$ ( ".ulDiv" ) . leftNumMenu ( demoLeftMenus, {
numberTypes: {
flowNew: {
hoverColor: "#EDCEAF" ,
color: "#FFA302" ,
title: "新的流程"
} ,
flowResponse: { hoverColor: "#C0D8B8" , color: "#486C3E" , title: "超时的流程" } ,
flowOut: { hoverColor: "#DAC0E3" , color: "#C325FF" , title: "有反馈的流程" } ,
flowAll: { hoverColor: "#A6A6A6" , color: "black" , title: "全部流程" }
} ,
showZero: false ,
clickFunction: function ( attr, level, numberType) {
var v = '' ;
if ( level== 1 ) {
v = attr. typeid;
} else {
v = attr. workflowid;
}
parent. jQuery ( "#contentframe" ) . attr ( "src" , "/gsoa/oaproject/weavertree/body.jsp?level=" + level+ "&value=" + v) ;
} } ) ;
function reload ( ) {
e8InitTreeSearch ( { ifrms: '' , formID: '' , conditions: '' } ) ;
var optFrame= jQuery ( "#contentframe" , parent. document) ;
var src= "/gsoa/oaproject/weavertree/body.jsp?1=1" ;
optFrame. attr ( "src" , src) ;
}
< / script>
日期控件
效果图:
所需引入js: 在需要使用的地方,写以下代码:
注意其中class=" wuiDate" 这个是必须要写的 _ callback:指选中完后调用的回调函数
扩展日期控件
效果图:
所需引入js:
在需要使用的地方,写以下代码:
< input name = " inputName" value = " " class = " wuiDateSel" _span = " spanId" _button = " buttonId" _callback = " test" >
< input name = " inputName2" value = " " class = " wuiDateSel" _span = " spanId" _button = " buttonId" _callback = " test" >
注意其中class=“wuiDateSpan”、class=“wuiDateSel” 这个是必须要写的,且不能更改。
开关组件
效果图:
所需引入js:
< link href = " /js/checkbox/jquery.tzCheckbox_wev8.css" type = text/css rel = STYLESHEET>
< script type = " text/javascript" src = " /js/ecology8/jNice/jNice/jquery.jNice_wev8.js" > script>
在需要使用的地方,写以下代码:
注意:tzCheckbox="true"是固定的,不能随意改动!
五、OA流程自定义接口
在流程的节点前后、出口都可以定义这样的自定义接口操作
1、接口实现方式
实现weaver.interfaces.workflow.action.Action接口即可
具体示例如下:
package weaver. oatest;
import org. apache. log4j. Logger;
import weaver. interfaces. workflow. action. Action;
import weaver. soa. workflow. request. *;
public class ImplementsActionDemo implements Action {
private static Logger log = Logger. getLogger ( ImplementsActionDemo. class ) ;
public String execute ( RequestInfo request) {
String requestId = request. getRequestid ( ) ;
String id = "" ;
Property[ ] properties = request. getMainTableInfo ( ) . getProperty ( ) ;
for ( int i= 0 ; i< properties. length; i++ ) {
if ( properties[ i] . getName ( ) . equalsIgnoreCase ( "id" ) ) {
id= properties[ i] . getValue ( ) ;
break ;
}
}
String detailName= "" ;
DetailTable[ ] dTables = request. getDetailTableInfo ( ) . getDetailTable ( ) ;
for ( int i= 0 ; i< dTables. length; i++ ) {
DetailTable dt = dTables[ i] ;
Row[ ] rows = dt. getRow ( ) ;
String detailId = "" ;
for ( int j = 0 ; j < rows. length; j++ ) {
Row row = rows[ j] ;
detailId = row. getId ( ) ;
Cell[ ] cells = row. getCell ( ) ;
for ( int k = 0 ; k < cells. length; k++ ) {
Cell cell = cells[ k] ;
String name = cell. getName ( ) ;
String value = cell. getValue ( ) ;
if ( "detailName" . equals ( name) ) {
detailName = value;
}
}
try {
return Action. FAILURE_AND_CONTINUE;
} catch ( Exception e) {
e. printStackTrace ( ) ;
log. error ( "操作异常:" + e. getMessage ( ) ) ;
}
}
}
return Action. SUCCESS;
}
}
2、配置流程自定义接口 【后端应用中心】【集成中心】【功能集成】【流程流转集成】,点击注册自定义接口 输入自定义接口基本信息 • 接口动作名称: 自定义 • 接口动作标识:不可重复 • 接口动作类文件 :接口动作的实现类位置 3、 流程节点附加操作接口调用 【后端应用中心】【流程引擎】【路径管理】【路径设置】,在该菜单下选择一个具体的流程路径, 然后流转设置-节点信息下面的节点前附加操作、节点后附加操作和出口附加规则都可以引用自定义接口,当流程经过这些节点时,就会自动触发定义好的接口。 转载声明: 作者:CSDN博主「程序媛-如花」 原文链接:https://blog.csdn.net/chengxuyuanruhua/article/details/91955391
你可能感兴趣的:(#,泛微OA)
【Redis(8)】Spring Boot整合Redis和Guava,解决缓存穿透、缓存击穿、缓存雪崩等缓存问题
在缓存技术的挑战及设计方案我们介绍了使用缓存技术可能会遇到的一些问题,那么如何解决这些问题呢?在构建缓存系统时,SpringBoot和Redis的结合提供了强大的支持,而Guava的LoadingCache则为缓存管理带来了便捷的解决方案。下面我将介绍如何通过整合SpringBoot、Redis和Guava来实现一个解决缓存穿透、缓存击穿、缓存雪崩、缓存污染和缓存数据一致性问题的缓存方案。一、整合
CSS样式中的布局、字体、响应式布局
目录一、使用内联块级元素布局二、使用float布局三、使用弹性盒子布局四、服务器字体五、响应式布局相关文章积累CSS样式属性:padding、margin、display:flex、font、position、cursor、:hover、:nth-child()、border-radius一、使用内联块级元素布局让想要横着的元素(left、mid、right)变成内联块级元素。示例leftmidr
官网迁移-宝塔面板使用
豆豆_初学者
阿里云 腾讯云 服务器
1、华为云购买一塔Ubuntu系统的ECS2、设置NAT网关+安全组,ECS的8888、22和3306端口映射到外网,可访问3、安装宝塔远程工具,连接ECS(密码是在购买ECS是自己设置的密码)4、安装宝塔Linux面板,命令:wget-Oinstall.shhttp://download.bt.cn/install/install-ubuntu_6.0.sh&&sudobashinstall.s
虚拟机Ubuntu如何开放3306端口
撰卢
服务器 运维
输入sudofirewall-cmd--query-port=3306/tcp显示no以上情况表面端口没开放依次输入sudofirewall-cmd--permanent--add-port=3306/tcpsudofirewall-cmd--reload都显示ok
关于JS中回调函数的个人理解
Jack_陈
近期在看到jQuery中test(index,test)的用法涉及到回调函数,之前未有涉及,于今晚专门看看了看,将个人对于回调函数的理解感悟记录一下,有不正确的地方希望指出。回调函数(callback),英文中的解释其实更容易理解:Acallbackisafunctionthatispassedasanargumenttoanotherfunctionandisexecutedafteritspa
md5 collision(NUPT_CTF)
胖佳儿Clara
md5collision(NUPT_CTF)100http://120.24.86.145:9009/md5.php访问题目链接,得到提示inputa,而题目是md5collision,md5碰撞。根据==用法,0==字符串是成立的,从而可以绕过MD5检查。所以找一个md5是oe开头的值,get方式传参过去,PAYLOAD:120.24.86.145:9009/md5.php?a=s8789261
ubuntu 22.04 pam 模块设置用户登录失败锁定
1、ubuntu22.04配置方法/etc/pam.d/common-auth加到如下行后#auth[success=1default=ignore]pam_unix.sonullok#添加如下内容auth[default=die]pam_faillock.soauthfailauthsufficientpam_faillock.soauthsucc/etc/pam.d/common-accoun
Ubuntu 系统安装 Docker 全流程指南
ANFUT
ubuntu docker linux
一、环境准备1.系统要求-Ubuntu22.04LTS或24.04LTS(兼容性最佳)-内核版本≥5.15(验证命令:`uname-r`)-64位架构(验证命令:`arch`输出应为`x86_64`)2.卸载旧版本sudoaptremovedockerdocker-enginedocker.iocontainerdruncsudorm-rf/var/lib/docker二、核心安装步骤3.配置仓库
python venv不适合变更路径(路径变更)的几种解决方案(venvpack、pip download、pip install --no-index --find-links=packages)
文章目录**为什么会出现路径问题?**1.**`pyvenv.cfg`文件**:该文件记录了虚拟环境的Python解释器路径(`home`字段)。如果源和目标机器的Python安装路径不一致,虚拟环境将无法找到正确的解释器。2.**脚本路径硬编码**:虚拟环境中的激活脚本(如`activate`)和可执行文件(如`python`)可能包含绝对路径或硬编码的相对路径,导致路径不匹配时失效。**解决方
HTTPS,不可或缺的数据安全锁
Arwen303
SSL证书 https 网络协议 http
一、HTTPS:数字时代的"隐形护卫"在网购时输入银行卡信息、登录社交平台发送私信、通过企业OA系统上传文件,这些日常操作背后都藏着一把无形的"安全锁"——HTTPS。↓https://www.joyssl.com/certificate/select/joyssl-dv-single-free-1.html?nid=59↑(注册码230959,赠送1个月有效期)它如同数据传输的"保险箱",在客户
【Linux操作系统】安装VS Code
LN花开富贵
Linux linux 单片机 物联网 嵌入式硬件 学习
更新系统包列表sudoaptupdate安装依赖项sudoaptinstallsoftware-properties-commonapt-transport-httpswget添加微软GPG密钥和仓库源wget-qhttps://packages.microsoft.com/keys/microsoft.asc-O-|sudoapt-keyadd-sudoadd-apt-repository"de
U3复盘
庄新妍
复盘1.从本单元中我学到的最重要的理念精读:ManagingPersonalFinances2.我在本片文章/音频/视频中学到的怦然心动的单词精读:entertainnotoriousimpulseprepaiddebitreloadallowancesparinglyornateresidencecomposerscorecopyistmisspendbeabouttogorgeousstrik
Python从入门到荒废-配置国内下载源
zrhsmile
Python python
为提升Python包安装速度,配置国内下载源是常见需求。以下是主流方法汇总,结合稳定性和易用性推荐:一、pip永久配置国内源(推荐)通过修改配置文件实现“一次配置,长期生效”:创建/修改配置文件Windows:路径:%APPDATA%\pip\pip.ini(如C:\Users\用户名\AppData\Roaming\pip\pip.ini)内容:[global]index-url=https:/
react/vue vite ts项目中,自动引入路由文件、 import.meta.glob动态引入路由 无需手动引入
初遇你时动了情
react.js vue.js javascript
utils/autoRouteHelper.ts//src/utils/autoRouteHelper.tsimport{lazy}from"react";importwithLoadingfrom"@/components/router/withLoading";/**自动生成某个文件夹下的子路由*/interfaceRouteItem{path:string;element?:any;chil
Oracle ERP MetaERP采购PO 后台表
anpeng2025
华为MetaERP SAP专题 Oracle ERP oracle Oracle ERP 数据库 sap 算法
OracleERPMetaERP采购PO后台表TABLE-PO.EDW_PO_VENDOR_HIERARCHIESTABLE-PO.FND_FUNCTION_PARAMETER_MAPTABLE-PO.FND_NOTIFICATIONSTABLE-PO.POA_BIS_SAVINGSTABLE-PO.POA_BIS_SAVINGS_EFCTABLE-PO.POA_BIS_SAVINGS_RPTTA
日常英语口语积累 | 第一轮
Ivy_IBFE
【口语练习资料】1.新闻编辑室(快)2.老友记3.摩登家庭4.CommencementspeechTips:1.readingandconsuminginformation2.nottomemorize3.nottoprematurelyapproachanativespeaker4.buildingyourinventoryofwordsandexpressions5.watchingTVors
JDK 17 下载
yzpyzp
java 开发语言
Oracle官网JDK下载:https://www.oracle.com/java/technologies/javase-downloads.html百度网盘下载:https://pan.baidu.com/s/1qxU-4ZfMyhlr5kbQ6RNHJg?pwd=aa53参考:https://blog.csdn.net/2503_91826368/article/details/147898
kotlin 泛型约束
weixin_30788731
移动开发
fun>sort(list:List){}冒号之后指定的类型就是泛型参数的上界,对于泛型参数T,只允许使用Comparable的子类型转载于:https://www.cnblogs.com/loaderman/p/10141823.html
nest.js实战之集成Apple登录
crayon-shin-chan
surprise # nest.js apple nestjs
1.简介https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_rest_api/verifying_a_userApple登录也是符合OAuth2规范的,但是我们不需要执行所有的步骤,只需要解析idToken获取用户信息即可Apple登录时用户可以选择是否隐藏邮箱,如果隐藏邮箱,则获取的邮箱是
【Java笔记】七大排序
赶飞机偏偏下雨
Java java 数据结构 笔记
目录1.直接插入排序2.希尔排序3.选择排序4.堆排序(重要)5.冒泡排序6.快速排序(重要)6.1Hoare法6.1.1Hoare法优化6.2挖坑法(重点)6.3快速排序的非递归写法7.归并排序海量数据的排序问题8.总结1.直接插入排序时间复杂度:最坏情况:O(n2)最坏情况:O(n)空间复杂度:O(1)稳定性:稳定如果一个排序本身就是稳定的排序那么他可以被实现为不稳定的排序但是如果一个排序本身
【.net core】通过类名字符串获取类成员
MoFe1
.netcore java 开发语言
//从当前执行的程序集获取Assemblyassembly=Assembly.GetExecutingAssembly();Typetype=assembly.GetType("YourNamespace.YourClass");//或从指定程序集获取Assemblyassembly=Assembly.Load("YourAssemblyName");Typetype=assembly.GetTy
Go-Redis × 向量检索实战用 HNSW 在 Redis 中索引与查询文本 Embedding(Hash & JSON 双版本)
Hello.Reader
数据库 运维 缓存技术 golang redis embedding
1.场景与思路痛点:把“文本内容”转成向量后,如何在本地Redis里做近似向量搜索(KNN),而不依赖外部向量数据库?方案:利用HuggingFace模型sentence-transformers/all-MiniLM-L6-v2生成384维Float32向量;借助RediSearch的HNSW索引能力,在Hash或JSON文档里存储&查询向量;用go-redisv9的高阶API(FTCreate
python实现精确的四舍五入
mocobk
由于计算精度的问题,python无法实现真正的四舍五入round四舍五入时是遵循靠近0原则,所以-0.5和0.5进行0位四舍五入,返回的都是0round(2.135,2)-->2.13round(number[,ndigits])Returnthefloatingpointvaluenumberroundedtondigitsdigitsafterthedecimalpoint.Ifndigits
Webpack构建流程详解
TEN01Y
webpack webpack 前端 node.js
Webpack的构建流程从一个或多个入口文件开始,递归分析项目中所有的依赖,最后将这些依赖打包成一个或多个输出文件。这个过程包括很多步骤,每个步骤都有特定的任务,Loader和Plugin可以插入到这些步骤中以完成文件转换或扩展功能。以下我会详细说明Webpack的整个构建流程,包括从初始化配置到生成最终的打包结果。1.初始化(Initialization)Webpack的打包流程从初始化开始,它
UIScrollView使用Masonry设置contentSize
生命不止运动不息
场景1:scrollview上有3个子视图,子视图高度确定,通过masonry设置scrollview的contentsize高度。方法:第一个子视图的顶部设置好与scrollview的顶部的值,最后一个子视图的底部设置好距离scrollview的底部的值,其他子视图正常设置。代码:-(void)viewDidLoad{[superviewDidLoad];//Doanyadditionalset
Python 代码生成 LaTeX 数学公式:latexify 示例 examples
文中内容仅限技术学习与代码实践参考,市场存在不确定性,技术分析需谨慎验证,不构成任何投资建议。latexify示例本notebook提供了多个使用latexify的示例。更多细节请参阅官方文档。如有任何疑问,请在issuetracker中提出。安装latexify#运行下方示例前请先重启运行时。%pipinstalllatexify-pyCollectinglatexify-pyDownloadi
【Lua】多脚本引用
在当前脚本引用其他脚本:require("脚本名")package.loaded()package.loaded返回的本身是一个Lua的全局表,它也被存储在了_G表中,即package.loaded和_G["package"].loaded和_G["package"]["loaded"]三者本质上一样它用于记录已经被require()加载过的模块package.loaded["脚本名"]只能返回一
防爆手机能用普通手机改装吗?安全隐患极高!
在石油、化工、矿山等危险作业环境中,防爆手机是保障通信安全的关键屏障。面对其相对较高的专业定价,一种危险的“捷径”想法悄然滋生:能否将普通手机改装成防爆手机?答案是一个斩钉截铁的“不”!这不仅在技术上完全行不通,更埋藏着致命的安全隐患。AOROA30防爆手机物理鸿沟:本质安全设计的不可逾越性防爆手机的核心在于“本质安全”设计理念。其精髓在于通过精密电路设计,严格限制可能产生的电火花或热效应的能量,
防爆手机是什么?能用普通手机改装吗?
在石油开采平台的井架之上,在化工车间的反应釜旁,在煤矿深达千米的巷道中,一群特殊的工作人员正使用着看似普通的通讯设备。这些设备外壳上醒目的Ex防爆认证标志,揭示着其与众不同的身份——防爆手机。这类专为易燃易爆环境设计的通讯工具,正以科技之力构筑着危险作业区域的安全防线。AOROA30防爆手机防爆手机的技术核心在于通过严格的“本质安全”设计消除能够点燃可燃介质的能量。它们采用多重精密保护机制:限制电
[Python] -项目实战类3- 用Python制作一个记事本应用
踏雪无痕老爷子
Python 开发语言 python
一、为什么要自己写记事本?提升GUI编程能力:通过构建窗口、菜单、文本区等组件,理解基本控件的使用。实用工具:自定义功能、更轻量、更符合个人使用习惯。实验与扩展空间大:方便加入特色功能,如自动保存、代码高亮、插件等。二、准备工作✅安装Python(建议Python 3.7+)。无需安装第三方库,tkinter是Python标准库的一部分。用于构建UI界面。sudoaptinstallpython3
js动画html标签(持续更新中)
843977358
html js 动画 media opacity
1.jQuery 效果 - animate() 方法 改变 "div" 元素的高度: $(".btn1").click(function(){ $("#box").animate({height:"300px
springMVC学习笔记
caoyong
springMVC
1、搭建开发环境
a>、添加jar文件,在ioc所需jar包的基础上添加spring-web.jar,spring-webmvc.jar
b>、在web.xml中配置前端控制器
<servlet>
&nbs
POI中设置Excel单元格格式
107x
poi style 列宽 合并单元格 自动换行
引用:http://apps.hi.baidu.com/share/detail/17249059
POI中可能会用到一些需要设置EXCEL单元格格式的操作小结:
先获取工作薄对象:
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet();
HSSFCellStyle setBorder = wb.
jquery 获取A href 触发js方法的this参数 无效的情况
一炮送你回车库
jquery
html如下:
<td class=\"bord-r-n bord-l-n c-333\">
<a class=\"table-icon edit\" onclick=\"editTrValues(this);\">修改</a>
</td>"
j
md5
3213213333332132
MD5
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MDFive {
public static void main(String[] args) {
String md5Str = "cq
完全卸载干净Oracle11g
sophia天雪
orale数据库 卸载干净 清理注册表
完全卸载干净Oracle11g
A、存在OUI卸载工具的情况下:
第一步:停用所有Oracle相关的已启动的服务;
第二步:找到OUI卸载工具:在“开始”菜单中找到“oracle_OraDb11g_home”文件夹中
&
apache 的access.log 日志文件太大如何解决
darkranger
apache
CustomLog logs/access.log common 此写法导致日志数据一致自增变大。
直接注释上面的语法
#CustomLog logs/access.log common
增加:
CustomLog "|bin/rotatelogs.exe -l logs/access-%Y-%m-d.log 
Hadoop单机模式环境搭建关键步骤
aijuans
分布式
Hadoop环境需要sshd服务一直开启,故,在服务器上需要按照ssh服务,以Ubuntu Linux为例,按照ssh服务如下:
sudo apt-get install ssh
sudo apt-get install rsync
编辑HADOOP_HOME/conf/hadoop-env.sh文件,将JAVA_HOME设置为Java
PL/SQL DEVELOPER 使用的一些技巧
atongyeye
java sql
1 记住密码
这是个有争议的功能,因为记住密码会给带来数据安全的问题。 但假如是开发用的库,密码甚至可以和用户名相同,每次输入密码实在没什么意义,可以考虑让PLSQL Developer记住密码。 位置:Tools菜单--Preferences--Oracle--Logon HIstory--Store with password
2 特殊Copy
在SQL Window
PHP:在对象上动态添加一个新的方法
bardo
方法 动态添加 闭包
有关在一个对象上动态添加方法,如果你来自Ruby语言或您熟悉这门语言,你已经知道它是什么...... Ruby提供给你一种方式来获得一个instancied对象,并给这个对象添加一个额外的方法。
好!不说Ruby了,让我们来谈谈PHP
PHP未提供一个“标准的方式”做这样的事情,这也是没有核心的一部分...
但无论如何,它并没有说我们不能做这样
ThreadLocal与线程安全
bijian1013
java java多线程 threadLocal
首先来看一下线程安全问题产生的两个前提条件:
1.数据共享,多个线程访问同样的数据。
2.共享数据是可变的,多个线程对访问的共享数据作出了修改。
实例:
定义一个共享数据:
public static int a = 0;
Tomcat 架包冲突解决
征客丶
tomcat Web
环境:
Tomcat 7.0.6
win7 x64
错误表象:【我的冲突的架包是:catalina.jar 与 tomcat-catalina-7.0.61.jar 冲突,不知道其他架包冲突时是不是也报这个错误】
严重: End event threw exception
java.lang.NoSuchMethodException: org.apache.catalina.dep
【Scala三】分析Spark源代码总结的Scala语法一
bit1129
scala
Scala语法 1. classOf运算符
Scala中的classOf[T]是一个class对象,等价于Java的T.class,比如classOf[TextInputFormat]等价于TextInputFormat.class
2. 方法默认值
defaultMinPartitions就是一个默认值,类似C++的方法默认值
java 线程池管理机制
BlueSkator
java线程池 管理机制
编辑
Add
Tools
jdk线程池
一、引言
第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。
关于hql中使用本地sql函数的问题(问-答)
BreakingBad
HQL 存储函数
转自于:http://www.iteye.com/problems/23775
问:
我在开发过程中,使用hql进行查询(mysql5)使用到了mysql自带的函数find_in_set()这个函数作为匹配字符串的来讲效率非常好,但是我直接把它写在hql语句里面(from ForumMemberInfo fm,ForumArea fa where find_in_set(fm.userId,f
读《研磨设计模式》-代码笔记-迭代器模式-Iterator
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
import java.util.Arrays;
import java.util.List;
/**
* Iterator模式提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象内部表示
*
* 个人觉得,为了不暴露该
常用SQL
chenjunt3
oracle sql C++ c C#
--NC建库
CREATE TABLESPACE NNC_DATA01 DATAFILE 'E:\oracle\product\10.2.0\oradata\orcl\nnc_data01.dbf' SIZE 500M AUTOEXTEND ON NEXT 50M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K ;
CREATE TABLESPA
数学是科学技术的语言
comsci
工作 活动 领域模型
从小学到大学都在学习数学,从小学开始了解数字的概念和背诵九九表到大学学习复变函数和离散数学,看起来好像掌握了这些数学知识,但是在工作中却很少真正用到这些知识,为什么?
最近在研究一种开源软件-CARROT2的源代码的时候,又一次感觉到数学在计算机技术中的不可动摇的基础作用,CARROT2是一种用于自动语言分类(聚类)的工具性软件,用JAVA语言编写,它
Linux系统手动安装rzsz 软件包
daizj
linux sz rz
1、下载软件 rzsz-3.34.tar.gz。登录linux,用命令
wget http://freeware.sgi.com/source/rzsz/rzsz-3.48.tar.gz下载。
2、解压 tar zxvf rzsz-3.34.tar.gz
3、安装 cd rzsz-3.34 ; make posix 。注意:这个软件安装与常规的GNU软件不
读源码之:ArrayBlockingQueue
dieslrae
java
ArrayBlockingQueue是concurrent包提供的一个线程安全的队列,由一个数组来保存队列元素.通过
takeIndex和
putIndex来分别记录出队列和入队列的下标,以保证在出队列时
不进行元素移动.
//在出队列或者入队列的时候对takeIndex或者putIndex进行累加,如果已经到了数组末尾就又从0开始,保证数
C语言学习九枚举的定义和应用
dcj3sjt126com
c
枚举的定义
# include <stdio.h>
enum WeekDay
{
MonDay, TuesDay, WednesDay, ThursDay, FriDay, SaturDay, SunDay
};
int main(void)
{
//int day; //day定义成int类型不合适
enum WeekDay day = Wedne
Vagrant 三种网络配置详解
dcj3sjt126com
vagrant
Forwarded port
Private network
Public network
Vagrant 中一共有三种网络配置,下面我们将会详解三种网络配置各自优缺点。
端口映射(Forwarded port),顾名思义是指把宿主计算机的端口映射到虚拟机的某一个端口上,访问宿主计算机端口时,请求实际是被转发到虚拟机上指定端口的。Vagrantfile中设定语法为:
c
16.性能优化-完结
frank1234
性能优化
性能调优是一个宏大的工程,需要从宏观架构(比如拆分,冗余,读写分离,集群,缓存等), 软件设计(比如多线程并行化,选择合适的数据结构), 数据库设计层面(合理的表设计,汇总表,索引,分区,拆分,冗余等) 以及微观(软件的配置,SQL语句的编写,操作系统配置等)根据软件的应用场景做综合的考虑和权衡,并经验实际测试验证才能达到最优。
性能水很深, 笔者经验尚浅 ,赶脚也就了解了点皮毛而已,我觉得
Word Search
hcx2013
search
Given a 2D board and a word, find if the word exists in the grid.
The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or ve
Spring4新特性——Web开发的增强
jinnianshilongnian
spring spring mvc spring4
Spring4新特性——泛型限定式依赖注入
Spring4新特性——核心容器的其他改进
Spring4新特性——Web开发的增强
Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
Spring4新特性——Groovy Bean定义DSL
Spring4新特性——更好的Java泛型操作API
Spring4新
CentOS安装配置tengine并设置开机启动
liuxingguome
centos
yum install gcc-c++
yum install pcre pcre-devel
yum install zlib zlib-devel
yum install openssl openssl-devel
Ubuntu上可以这样安装
sudo aptitude install libdmalloc-dev libcurl4-opens
第14章 工具函数(上)
onestopweb
函数
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/
Xelsius 2008 and SAP BW at a glance
blueoxygen
BO Xelsius
Xelsius提供了丰富多样的数据连接方式,其中为SAP BW专属提供的是BICS。那么Xelsius的各种连接的优缺点比较以及Xelsius是如何直接连接到BEx Query的呢? 以下Wiki文章应该提供了全面的概览。
http://wiki.sdn.sap.com/wiki/display/BOBJ/Xcelsius+2008+and+SAP+NetWeaver+BW+Co
oracle表空间相关
tongsh6
oracle
在oracle数据库中,一个用户对应一个表空间,当表空间不足时,可以采用增加表空间的数据文件容量,也可以增加数据文件,方法有如下几种:
1.给表空间增加数据文件
ALTER TABLESPACE "表空间的名字" ADD DATAFILE
'表空间的数据文件路径' SIZE 50M;
&nb
.Net framework4.0安装失败
yangjuanjava
.net windows
上午的.net framework 4.0,各种失败,查了好多答案,各种不靠谱,最后终于找到答案了
和Windows Update有关系,给目录名重命名一下再次安装,即安装成功了!
下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=17113
方法:
1.运行cmd,输入net stop WuAuServ
2.点击开