IBM Portal 开发系列讲座:
IBM Websphere Portal 主题与皮肤开发
北京东华合创数码科技公司 郑文平
内容简介:
Portal 的主题与皮肤开发说穿了还是普通 jsp 的开发,只不过大量使用了 ibm 自带的标签库,开发起来显得比较麻烦。但是,如果您深刻洞悉了与主题、皮肤相关的这几个文件之间的调用关系,使用起来就能运用自如了。这里是作者从大量的项目经验中总结出的几点体会,贡献出来,希望与大大家分享。
在这篇文章里我想从以下几个方面来介绍 websphere portal 的主题与皮肤开发:
1、 初级入门:什么是 Portal 的主题与皮肤开发?
2、 中级开发:如何更换 Portal 系统的 logo 图标;
3、 中级进阶:开发个性化的主题;
4、 高级探索:开发自适应分辨率的主题与皮肤;
5、 高手过招:更改 Portal 系统的登录方式;
6、 Portal 的皮肤开发简介。
一、初级入门: Portal 的主题与皮肤开发:
要了解如何开发 portal 的主题,首先要了解 websphere portal 的显示流程。 IBM WebSphere Portal 使用不同的 Java Server Page ( JSP ) 、级联样式表( Cascading Style Sheet , CSS )和图像来显示门户页面。它使用位于 X:/WebSphere/AppServer/installedApps/YourComputerName /wps.ear/wps.war 目录下 themes 、 skins 和 screens 目录中的 JSP 来构造门户页面。这些目录中的每一个都包含 html 、 wml 和 chtml 子目录, WebSphere Portal 将它们用于服务不同客户机,例如桌面浏览器和移动设备。我们这里以通常使用的 html 方式下的主题开发为例,介绍 Portal 的主题开发。
用于显示门户页面的 JSP 流程:本文描述了缺省主题定义的 Default.jsp 、 Head.jsp 、 AdminLinkBarInclude.jsp 、 ToolBarInclude.jsp 、 PlaceBarInclude.jsp 、 PageBarInclude.js 以及延伸出来的 PageBeginInclude.jsp 、 PageEndInclude.jsp 的内容和流程。下面简单介绍这几个 jsp 。注意:这部分内容属于最初级的开发,您要弄懂这些介绍,必须具备一定的 jsp 基础、 css 基础和标签库的基础,最好做过相应的开发。
1 、 Default.jsp :
所有屏幕聚集都从 Default.jsp 开始。用于缺省主题的 Default.jsp 位于 wp_root/app/wps.ear/wps.war/themes/html 。这个 JSP 包含其它用于显示标题、公司徽标、工具栏的 JSP 以及用于往可用位置及页面植入内容的 JSP 。在 Default.jsp 的末尾处, screenRender JSP 标记选择被请求的屏幕(例如 login 或 forgotpassword )。以下介绍的 jsp 是以这样的顺序先后调用的。
2 、 Head.jsp
Head.jsp 生成标题并嵌入指向样式表文件的链接。它还定义了支持 BIDI (双向)文本所需的变量。这个 JSP 的内容将在这里描述。您也可以通过 在这里定死 portal 网站的标题,这比 IBM 公布的以标签的方式写来的容易,也更易使用。如果您开发了多套主题,而且这几套主题的 page title 如果也一样的话(除了虚拟门户,一般是这样子),您可以把这几个文件放到 themes/html 的根目录下,其他主题的 default.jsp 都来调用这个文件就可以了。
3 、 AdminLinkBarInclude.jsp
AdminLinkBarInclude.jsp 主要用来显示了“新建页面”、“编辑页面”、“分配页面许可权”三个标签
4 、 ToolBarInclude.jsp
ToolBarInclude.jsp 显示欢迎消息以及为用户提供的链接工具栏。门户网站上显示什么样的链接工具栏取决于用户上下文。例如,登录的用户看到“我的门户网站”、“管理”(尽管理员可见)、“编辑我的‘概要文件’”、“注销”等之类的链接;而注销的用户看到 “忘记密码”、“登录”、“帮助” 之类的链接。
5 、 PlaceBarInclude.jsp
PlaceBarInclude.jsp 用来显示一级菜单,即“首页”、“文档管理器”、“公司概况”、“业务简介”等,属于最高层的目录,您在任何一个一级菜单上都可以通过“新建页面”来创建二级菜单,你创建的内容将被存储到数据库(原始使用的是 cloundscape ),您也可以把它倒入到 db2 、 oracle 等任何一个 portal 所支持的数据库中,此内容将在我的下一篇文章中详细论述,这里不再一一提及。
6 、 PageBarInclude.jsp
用来显示二级菜单,当您点击一级菜单中的任一标签时,系统会调用该文件,并检索出该菜单的所有子菜单,默认显示在 PlaceBar 的下面。
二、中级开发:如何更换 Portal 系统的 logo 图标;
1 、 Default.jsp 的工作原理:
我们看这个例子, Default.jsp 大致上将 Portal 系统的默认页面划分为这样一个表格:
表 -1 : Default.jsp 总体调用效果
PageBegin: 用来显示页面生成以前的提示文字,例如: Portal 系统正在加载,请稍候 ……
Portal 系统主体部分:用来显示详细的 Portal 页面;
PageEnd.jsp 用来显示页面生成以后的东西。例如公司版权信息等。
表 -2 : Portal 系统正文部分的调用关系:
徽标部分,在 default 中调用
我的门户菜单,在 ToolBar 中调用
个性化菜单,在 AdminLink 中调用
Portal 的 Body 部分,用来显示各个 portlet 以及高层次的三级菜单。
页面的结尾,用来显示公司版权信息等。
2 、换一个 logo :
打开 Default.jsp ,您会开到一个表格,在表格的左上角,有这样一段语句,用来显示默认主题的 Logo 徽标:
width="100%" valign="top" align="<%=bidiAlignLeft%>" nowrap>
上面已经介绍过,整个 Portal 系统的页面由 Default.jsp 分割成一个大的表格,用来显示或者调用不同的 jsp 。我们在这个大表格的最左上角化出一个
,用来显示公司的徽标。这段语句就是在这个单元格内插入一个图片,叫做 Logo.gif 。
明白了吗?您可以将这个文件名改称您想插入的任意一张图片的名字,只要将这张图片放到 .war/images/ 目录下就可以了。这里支持几乎所有的图片格式,您可以任意摆放,大小、位置等都有您说了算。到这里,您可能已经想到了:那么,我养插入一个 Flash 呢?别着急,下面将会提到这点。
3 、用 flash 作 logo :
用 Flash 作徽标是个不错的注意,它可以使您的门户网站看起来更丰富、生动一些。但是, Flash ,也就是 .swf 格式的文件,是不能直接通过这种方式来插入的,因为我们的浏览器并不能识别它。要插入一个动画,必须位置制定相应的驱动。您可以用以下这段代码,为之生成:
border="0" cellpadding="0" cellspacing="0" height="81" valign="middle" align="left">
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" width="510" height="81">
%>/images/firstpagelogo.swf">
pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="510" height="81">
这里在插入了一个名字为 firstpagelogo.swf 的影片做公司徽标,他的大小是 510*81 ,请将这个影片文件放在 .war/images 目录下,重启服务器,看看您的首页上,是不是已经出现了?
三、 中级进阶:开发个性化的 Portal 主题
1 、理解、开发各级菜单;
Default.jsp 调用 PlaceBarInclude.jsp 文件来显示一级菜单,如果一级菜单下面还有二级菜单,那么当您点击该一级菜单是, Default 将调用 PageBarInclude.jsp 来显示二级菜单。当然,您也可以不再调用该文件,那么系统将缺省调用 Portlet 的皮肤里面的 LayerContainer.jsp 文件,用来以三级菜单代替二级菜单,这便是个性化的左侧管理菜单。
打开这两个文件,您会发现里面的内容非常简单。请看下面的清单:
l 首先由这样一个标签:
意思是如果菜单时可用的,那么当您登录进去以后将执行如下操作。使用这句代码,必须引入 Portal 的标签库,具体的过程这里不再赘述。接下来绘制了一个表格,用来显示里面的操作。表格内的内容,下面将作介绍。
l 菜单的左右协调:如果您一共定义了十几个一级菜单,而一栏只能显示 8 个,剩下的菜单怎么办?我们在这里放置了两个三角形的小图标,如果右边还有更多的菜单,小图标会自动出现,当您点击时,就会显示出剩余的菜单。 具体的代码是通用的,这里不再赘述。我们需要强调的是:菜单条在这里支划分为两种情况:一是选中的情况下,一是为选中的情况下,即:
这里用来显示选中该菜单的情况下该菜单条的显示方式。
这里用来显示未选中该菜单的情况下该菜单条的显示方式。
例如:
Background="<%= wpsBaseURL %>/images/title_back01.jpg" height="30">
border="0" src='<%= wpsBaseURL %>/images/b01.jpg' alt="">
<%= com.ibm.wps.model.LocaleHelper.getTitle((com.ibm.portal.Localized)wpsNavNode, com.ibm.wps.engine.RunData.from( pageContext.getRequest()).getLocale())%>
border="0" src='<%= wpsBaseURL %>/images/b01.jpg' alt="">
我们首选添加一张背景图片,然后左侧放一张前缀,中间打印该菜单条的名字,后面又放一张图片做后缀,这样整个菜单条看起来就非常漂亮了。
l 接下来是显示工具栏的情况下:
这里的操作将使具有权限的用户通过点击这张图片,直接编辑相应的 portal 页面。不过据笔者的开发经验,大部分的用户会隐藏掉这个入口,以免引起管理上的混乱,具体的开发内容将在以后的文章中提及,智利将不再详细介绍。
l 最后的代码用来显示系统收藏夹:
当您登录后,会发现在一级菜单的最右边多出一个“我的最爱”的东西,这是 portal 系统自带的收藏夹,您可以通过这个入口将自己喜欢的页面添加到您的收藏夹,然后您就可以通过点击这里直接进入到你收藏的页面了。
2 、开发个性化工具栏
要获得个性化的工具栏,您可以修改 ToolBarInclude.jsp 这个文件。这个文件提供了 Portal 管理员进到管理界面的入口。
在这里你可以编辑自己的“概要文件”,就个人的用户信息,修改自己的姓名、密码等。更深一层的话,您可以在这里显示欢迎信息,例如张三同志登录后,会打印出:“欢迎您,张三同志!”的语句。要实现这个功能实际上非常简单,请看:
当然,您需要引入相应的标签库,具体的应用属于普通的 jsp 开发,您可以参照平常的开发经验去实现。
3 、开发个性化的管理标签
所谓的个性化指的是,您可以删掉管理标签的一个或者多个,也可以根据喜好添加自己需要的标签。这需要您来修改 AdminLinkBarInclude.jsp 文件。例如:
valign="middle" align="<%=bidiAlignRight%>" nowrap>
这段代码用来显示“新建页面”的管理标签,通过电机这个标签,您可以为当前页面创建一个子页面。同理,您可以个性化“编辑页面”和“分配页面权限”,当然,您也可以之间隐藏掉这个入口。
四、 高级探索:开发自适应分辨率的主题与皮肤
1 、开发 1024 下的主题
刚安装完 Portal 系统后,刚才介绍的几个 jsp 会在默认的 .war/theme 目录下,您可以新建一个文件夹,将这几个 jsp 文件拷贝至该目录下,然后在管理界面下添加该主题。该主题默认下就是 1024 的。您可以开发多套主题,注意:请充分利用一些公共的资源,例如这些主题可能使用的是同样的版权信息,这样,您可以将 PageEnd.jsp 页面放到 themes/entention 下,然后让所有的主题调用这个文件。
当然,为了保险起见,您可以在 Default.jsp 最外层的表格中这样写死:
2 、开发 800 分辨率下的主题
开发 800 下的主题说穿了非常简单,您可以会出这么一个表格:
将 Default.jsp 中最外层的 table 里面所有的内容拷贝到这里!
将这个表格覆盖到原来 Default.jsp 文件中最外层的表格就可以了。注意:在 default.jsp 中调用的各个文件中,可能都有表格存在,如果这些表格中有的宽度超过了 800 ,或者两个并列一行的表格宽度超过了 800 ,请适当调小。
3 、开发 1024 和 800 下自适应得主题
要开发自适应的主题就更简单了!请设定一个变量 w, 先写一个 JavaScript ,用来读取客户端的浏览器分辨率,如果是 800 的,则给给变量赋值 w=800 ,反之如果是 1024 的,就给赋值为 w=1024 。剩下的事,不用我说了吧!
五、高手过招:更改 Portal 系统的登录方式;
1、从首页上登录
您需要用 wsad 开发一个 portlet ,并在 jsp 中写一个代理,将用户凭证提交给系统自带的认证 action 中。这个 portlet 可以这样来设计:
//如果没有登陆的情况下,提醒用户输入它的用户名与密码:
用户按下“登录“后,将用户名和密码提交到系统自带的 action 中:
//在这里将用户名和密码付给系统自带的登录框。
//如果已经登陆了,可以显示用户的常用信息,比如,读取用户的 Lotus 邮箱,然后显示他哟年级封邮件等:
甚至,您可以利用 url-mapping 自定义几个页面,从首页上直接进入到您的业务系统(如上)。
这样的话,您甚至可以封死 portal 页面右上角自带的“登录”标签,也许您会问我又想用系统自带的页面呢?没关系,您也可以在浏览器中输入: http://machinename:9081/wps/myportal ,当然,干脆您直接输入一个错误的用户名和密码,系统自然后带您会带系统自带的页面了。
2、拒绝从系统自带的登录界面
但是在上面这种情况下,可能会出现这种情况:当用户名或者密码错误的时候,系统会返回到系统自带的登录框上面,为避免这种情况,您可以封死这个开关。这个非常简单,我在这里顺便一提:
系统自带的登录页面是 .war/screen/html 下的 login.jsp 文件,您可以删掉该文件里的所有内容,然后加入这么一句:
alert("用户名或者密码输入有误,请重新输入! ");
window.location='http://xxjsb-scdd2.portal.com:9081/wps/portal';
呵呵,是不是带您又回到了首页呢?是的,确实如您所想,这样就封死了系统自带的登录页面。如果您的用户名和者密码错误,或者您通过 myportal 直接调用,都不起作用了吧!系统会带您回到首页的登录界面,请重新输入!
3、遗留问题:
在实际开发中,您也许会发现还有其他一些意想不到的问题,是的,这个地方确实有许多值得注意的地方,也许只有您亲自来试过了,才知道其中的玄机。我也希望在开发中大家相互交流,把发现的好地方贡献出来,大家一起分享。好吧,祝您成功!
六、 Portal 的皮肤开发简介
1 、该改 portlet 的标题背景图片
非常简单,请找到 .war/skin/html 下,发现系统已经呆了好几套皮肤,打开其中任意一个文件夹,您都能发现这个文件:
Control.jsp 。这里面也是一个 table 。该 table 有两行:第一行用来显示 portlet 的标题,后面是最大化、最小化、编辑按钮;第二行是 portlet 的 body ,用来显示 portlet 的内容。要换掉 portlet 标题的背景图片其实非常简单:在第一个
里面加上这么一句代码:
一切 OK !
2 、隐藏掉“最大化”、“最小化”、“还原”等图标。
这段代码是用来显示“最小化”按钮,不用说,直接去掉就行了!同理,您可以对此做任何编辑。
3 、高级:加入个性化的左侧管理菜单
在 skin 目录下看到这个文件了吗? LayeredContainer.jsp 不错,就是它,它是一个表格:
该表格左侧就是三级菜单(您如果再 Default.jsp 中部调用 PageBar 的话,这就是二级菜单了)。右边呢,则是整个 Portal 系统得 Body 部分,显示了所有的 portlet 。不晓得 IBM 为什么要这样安排,似乎有点不合理。不过,趋势是在这里修改的,可能是把它看作一个容器了吧!在左侧的表格部分,您可以向编辑普通的网页一样,只要您稍微有些美工知识,就可以随心所欲的制作出个性化的管理菜单了。
4 、高级:与 CSS 结合,开发出漂亮的效果。
看上面的效果,是不是非常飘亮?其实这很简单,看LayeredContainer.jsp 这个文件,下面是他的表格,稍微加一些 CSS ,就能实现这种效果了。如:
width="100%" >。
当然,这需要素质比较高的美工配合,也需要工程师在长期的开发中仔细琢磨。再次祝您在 Portal 开发中信手拈来、出神入化!
参考资料:
1 、 Sukumar Konduru 顾问软件工程师 达拉斯, IBM Developer Technical Support Center 先生的论文:了解 WebSphere 门户网站如何显示门户页面 — 第 I 部分:描述 Default.jsp 、 Head.jsp 和 ToolBarInclude.jsp
2、 IBM 系列红皮书。
致谢:
作者在开发及写作中得到了 赵建业 先生的大力帮助, IBM 公司李 女士、 王 女士, 曹 先生、 丁 先生、 陈 先生、 胡 先生的大力帮助,在此一并鸣谢。
作者简介:郑文平,北京东华合创数码科技公司软件工程师, Portal 信息化专员,长期从事 Portal (尤其是 IBM Websphere Portal )开发,曾参与并引领了北京驰普企业门户、山东新汶矿务局远程调度系统、中国石化齐鲁公司综合数据平台、北京供电局等多个 Portal 项目的开发。
您可以通过 [email protected] 或者 [email protected] 与作者取得联系。作者的 msn 是: [email protected] 。
你可能感兴趣的:(websphere,ibm,portlet,jsp,border,table)
mysql实时同步到es
数据库
测试了多个方案同步,最终选择oceanu产品,底层基于Flinkcdc1、实时性能够保证,binlog量很大时也不产生延迟2、配置SQL即可完成,操作上简单下面示例mysql的100张分表实时同步到es,优化备注等文本字段的like查询创建SQL作业CREATETABLEfrom_mysql(idint,cidintNOTNULL,gidbigintNOTNULL,contentvarchar,c
探索 TypeScript Redux:构建大规模JavaScript应用的终极指南
柳旖岭
探索TypeScriptRedux:构建大规模JavaScript应用的终极指南去发现同类优质开源项目:https://gitcode.com/在当今快速发展的前端开发领域中,组合正确工具集来应对复杂性和扩展性挑战至关重要。今天,我们将深入了解一个令人兴奋的开源项目——TypeScriptRedux,它结合了TypeScript、JSPM、typings、React和Redux的强大功能,为开发者
揭秘 CSS Houdini:用浏览器魔法解锁 CSS 的终极潜力
寒鸦xxx
css houdini 前端
一、为什么我们需要CSSHoudini?1.1传统CSS的困境当我们试图用CSS实现一个波浪形边框时,通常会经历这样的挣扎:/*传统实现方案*/.wave-border{position:relative;overflow:hidden;}.wave-border::after{content:'';position:absolute;/*需要复杂计算和多个伪元素拼接*/}这种实现方式存在三个致命
Mybatisplus更新某个字段为null
辉夜姬想环游世界
日常记录 java spring 开发语言
使用@TableField(updateStrategy=FieldStrategy.IGNORED)注解要更新的字段。@TableField注解是Mybatisplus框架中提供的一个注解,主要用于实体类(Entity)的字段上,帮助开发者更灵活地映射Java对象属性与数据库表字段之间的关系主要功能:1、字段映射:当实体类和数据库字段不一致时,可以是使用value属性指定数据库字段名@Table
CSS 滚动条样式修改(详细)
mr_cmx
css css3 html
1、滚动条整体部分使用::-webkit-scrollbar示例:.container::-webkit-scrollbar{width:20px;//修改滚动条宽度}2、滚动条中的滑块使用::-webkit-scrollbar-thumb示例:.container::-webkit-scrollbar-thumb{border-radius:8px;box-shadow:inset005pxrg
JS宏实例:数据透视工具的制作(三)
jackispy
JS宏实例 javascript 前端 java
数据透视工具的制作(二)中详细展示了窗体设计思路及想要实现的功能,在本节中,将完成该工具中的核心计算代码,如分组求和、计数、累乘等的实现方式。在这里,我们可以构思两个类:TablePivot:主要用于管理数据矩阵,包括自动识别列数据类型,以及实现数据分组功能。GroupBy:对分组后的数据进行各种统计操作,例如求和、计数、求平均值等。一、TablePivot类1、示例代码classTablePiv
消息队列MQ技术的原理和IBM MQ的基本操作
Chelseady
python python
消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。通过消息队列,应用程序可独立地执行--它们不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息。消息中间件概述消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。通过消息队列,应用程序可独立地执行--它们不需要知道彼
QT C++ new QTableWidgetItem 不需要删除指针
测控系统集成
c++语言 测控 QT 数据库 qt
在Qt中,使用QTableWidgetItem时,通常不需要手动删除指针,除非你是在使用原始指针而非智能指针(如std::unique_ptr或std::shared_ptr)。这是因为QTableWidgetItem本身是Qt框架的一部分,它负责管理自己的内存。1.使用QTableWidgetItem当你向QTableWidget添加项时,可以直接创建并添加QTableWidgetItem对象,
记录自己的日常总结与错误
快乐呆橘
mysql github visual studio java android
//1.解决VMware的方法:管理员身份运行cmd->输入netshwinsockreset->重启电脑同时也是windows修复网络问题的一种方法//2.解决spring中tx报错问题:在设置xmlcatalog时要把key改成http://www.springframework.org/schema/tx/spring-tx.xsd//3.解决jsp链接数据库中文乱码问题:首先在mysql端
百万架构师第四十课:RabbitMq:RabbitMq-工作模型与JAVA编程|JavaGuide
后端
来源:https://javaguide.netRabbitMQ1-工作模型与Java编程课前准备预习资料Windows安装步骤Linux安装步骤官网文章中文翻译系列环境说明操作系统:CentOS7JDK:1.8Erlang:19.0.4或最新版RabbitMQ:3.6.12或最新版版本对应关系典型应用场景跨系统的异步通信。人民银行二代支付系统,使用重量级消息队列IBMMQ,异步,解耦,削峰都有体
深入解析:Tableau在数据可视化中的高级应用
Echo_Wish
实战高阶大数据 信息可视化 数据分析 数据挖掘
深入解析:Tableau在数据可视化中的高级应用引言在大数据时代,数据可视化已成为数据分析中不可或缺的一部分。作为一款广受欢迎的数据可视化工具,Tableau以其强大的功能和灵活性,赢得了众多数据分析师的青睐。然而,许多人在使用Tableau时,仅停留在基本操作层面,未能充分发挥其潜力。本文将深入探讨Tableau的高级应用,展示其在复杂数据分析中的强大能力,并以具体实例说明其实际应用效果。数据预
前端超长列表,虚拟滚动实现
大橙子-
前端 css javascript
虚拟滚动.container{width:300px;height:500px;overflow:hidden;border:1pxsolid#ccc;margin-top:50px;}.scroll-box{width:100%;height:100%;overflow-y:auto;overflow-x:hidden;position:relative;}.scroll-height-main
LLM论文笔记 14: The Impact of Positional Encoding on Length Generalization in Transformers
Zhouqi_Hua
大模型论文阅读 论文阅读 人工智能 深度学习 笔记 语言模型
Arxiv日期:2023.12.15机构:McGillUniversity/IBM/Facebook/ServiceNow关键词长度泛化位置编码CoT核心结论1.decoder-only中不显式使用位置编码(NoPE)可以提高长度泛化性能2.(证明了)decoder-onlytransformer如果NoPE同时具备绝对APE和RPE的能力3.暂存器(cot)对于长度泛化和任务相关,同时关注短期和
Java Pjsip (Pjsua2 api ) 2.10 windows sip语音呼叫教程
java_lilin
pjsip pjsip sip pjsua2 java sip
1.安装swigwin-4.0.1下载地址http://www.swig.org/download.html注意是swigwinWindowsusersshoulddownloadswigwin-4.0.1whichincludesaprebuiltexecutable.配置目录到winpath2.下载pjproject-2.10.zip(如果有python错误请安装py2.7及环境path配置)
【layui】layui表格过滤
weixin_43250628
layui 前端 layui javascript 前端
1.除了引用必要的layui的js和css,还需引入tableFilter.js。2.然后就是代码展示部分;layui.config({base:'../../layui/plugins2/',//扩展路径version:'v1.0.0'}).extend({tableFilter:'tableFilter'//模块别名});functionsetGridData(data){layui.use(
Autojs: 使用 SQLite
xxxxxue
自动化工具 sqlite 数据库 autojs autox
例子letdb=newSQLiteUtil("/sdcard/A_My_DB/sqlite.db");db.fastCreateTable("user_table",{name:"",online:false,},["name"]//设置name为唯一,重复项不会添加成功);//新增数据的IDletrow_id=db.insert("user_table",{name:"小明5",online:t
Excel核心函数VLOOKUP全解析:从入门到精通
The god of big data
大Big数据Data 教程 excel
一、函数概述VLOOKUP是Excel中最重要且使用频率最高的查找函数之一,全称为VerticalLookup(垂直查找)。该函数主要用于在数据表的首列查找特定值,并返回该行中指定列的对应值。根据微软官方统计,超过80%的Excel用户在日常工作中都会使用到这个函数。二、函数语法详解=VLOOKUP(lookup_value,table_array,col_index_num,[range_loo
函数式编程倡导的「不可变数据结构」如何保证性能
编程
在函数式编程(FunctionalProgramming,简称FP)中,不可变数据结构(ImmutableDataStructures)是一个核心概念。与传统的可变数据结构相比,不可变数据结构不可修改,而是通过创建新的数据结构来表达数据的变更。这一特点使得函数式编程能够简化并行计算、避免副作用,进而提高程序的可靠性和可维护性。然而,不可变数据结构可能带来的性能问题,例如内存的使用、数据复制的成本等
java脚本弹出输入框,使用弹出框编辑(增加)表单内容
jordan.xue
java脚本弹出输入框
0、背景使用Amazeui中Prompt模态窗口Modal1、JQuery功能:表单复位获取表单的值,并显示在修改弹出框中(文本框、单选、多选、下拉框)发送Post异步请求给后台自刷新$(function(){//编辑功能$('table.edit').on("click",function(){//表单复位document.getElementById("form-machineRole").r
新增 编辑弹出框
_大菜鸟_
前端 javascript 开发语言
用的是table的column取消保存columns:[{type:"input",label:"路段名称",prop:"roadName"},{type:"select",label:"方向",prop:"direction"},{type:"input",label:"开始桩号",prop:"startStakeNo"},{type:"input",label:"结束桩号",prop:"end
vue3中<el-table-column>状态的显示
BillKu
vue.js elementui javascript
方法1:使用作用域插槽+标签{{row.status===1?'启用':'禁用'}}consttableData=[{id:1,name:'数据1',status:1},{id:2,name:'数据2',status:0},//...]方法2:使用formatter格式化显示conststatusFormatter=(row)=>{returnrow.status===1?'启用':'禁用'}自定
在Ubuntu24.04上安装Stable-Diffusion1.10.1版本
BBM的开源HUB
AI专栏 stable diffusion
之前曾介绍过在Ubuntu22.04上安装Stable-Diffusion:在Ubuntu22.04上部署StableDiffusion_ubuntustabledif-CSDN博客这个安装我们使用condapython虚拟机。这次我们介绍的是在Ubuntu24.04安装Stable-Diffusion的最新版本V1.10.1(截止到今天最新版),并且我们这次安装不再使用conda虚拟环境。一:安
50道题快速复习MySQL之准备篇
比奇堡的天没有云
速通MySQL mysql oracle 数据库
文章目录1.创建数据库表2.创建表数据本文旨在帮助大家快速复习MySQL,共有4张表,50道题.本篇文章在做讲解50道题目之前,先将数据库表以及表中的数据创建好。1.创建数据库表建表语句如下,分别是学生表,课程表,教师表和成绩表。#–1.学生表#Student(s_id,s_name,s_birth,s_sex)–学生编号,学生姓名,出生年月,学生性别CREATETABLE`Student`(`s
InfiniBand包头与ibverbs接口实现(一)—— RDMA WRITE分析
网络编程code数据数据库
InfiniBand是一种高性能网络技术,其数据包格式设计对实现高效可靠的网络传输至关重要。本文将详细介绍InfiniBand数据包的头部结构,分析它们在实际应用中的作用和实现机制。并且我们会讨论可靠连接(RC)服务类型下的传输头格式,以及RDMAWRITE等典型操作场景,以及它们在ibverbs接口中的对应关系。TableofContents:两类包头格式RoutingHeaders2.1.源码
Linux 运行执行文件并将日志输出保存到文本文件中
luoqice
linux
在Linux系统中运行可执行文件并将日志输出保存到文本文件中,可以使用以下几种方法:方法一:使用重定向符号>或>>覆盖写入(>):./your_executable>logfile.txt这会将可执行文件的输出(包括stdout和stderr)覆盖写入到logfile.txt文件中。追加写入(>>):./your_executable>>logfile.txt这会将可执行文件的输出追加到logfi
Linux、Docker、Redis常见面试题
百百味
linux docker redis
1.Linux什么是Linux?Linux是一种基于UNIX的操作系统,最初是由LinusTorvalds引入的。它基于Linux内核,可以运行在由Intel,MIPS,HP,IBM,SPARC和Motorola制造的不同硬件平台上。Linux中另一个受欢迎的元素是它的吉祥物,一个名叫Tux的企鹅形象。UNIX和LINUX有什么区别?Unix最初是作为BellLaboratories的专有操作系统
JSP(学习自用)
文城521
JAVA实训 java 学习 html 前端
一、本质JSP解析后就是Servlet类的java代码。二、jsp内嵌java代码1、声明脚本用于声明属性和方法。2、运行脚本相当于在service方法中写代码3、打印脚本用于打印上面两个脚本内声明的变量结果啥的。//页面会显示张三三、jsp内置对象1、request代表客户端的请求。2、response代表服务端的响应。3、session代表客户端当前会话。4、application代表整个We
java代码走查_java代码开发完成后,代码走查规范
游凯超
java代码走查
代码走查注意事项:1、不变的值,尽量写个常量类2、尽量使用if{}else,不要一直if去判断3、减少循环调用方法查询数据库4、dao层尽量不要用逻辑,尽量在service里写业务逻辑5、金额使用Bigdecimal类型的,0.00这种格式靠右显示6、iframe的弹框,要放到js里,可以缓存,放到jsp里每次都需要加载。7、ajax对应success对应一个error异常,尽量用error,网络
redis基础篇——redis常用的数据类型
石灰聪
redis redis
数据模型Redis的存储我们叫做key-value存储,或者叫做字典结构。key的最大长度限制是512M,值的限制不同,有的是用长度限制的,有的是用个数限制的。Redis是KV的数据库,Key-Value我们一般会用什么数据结构来存储它?哈希表。Redis的最外层确实是通过hashtable实现的,在Redis里面,这个哈希表怎么实现呢?我们看一下C语言的源码每个键值对都是一个dictEntry,
MybaitsPlus学习笔记(三)常用注解
画船听雨眠aa
学习 笔记
目录一、@TableName问题:解决方法1通过@TableName解决问题解决方法2通过全局配置解决问题二、@TableId问题:解决方法1通过@TableId解决问题三、@TableField四、@TableLogic一、@TableName问题:MyBatis-Plus在确定操作的表时,由BaseMapper的泛型决定,即实体类型决定,且默认操作的表名和实体类型的类名一致。若实体类类型的类名
怎么样才能成为专业的程序员?
cocos2d-x小菜
编程 PHP
如何要想成为一名专业的程序员?仅仅会写代码是不够的。从团队合作去解决问题到版本控制,你还得具备其他关键技能的工具包。当我们询问相关的专业开发人员,那些必备的关键技能都是什么的时候,下面是我们了解到的情况。
关于如何学习代码,各种声音很多,然后很多人就被误导为成为专业开发人员懂得一门编程语言就够了?!呵呵,就像其他工作一样,光会一个技能那是远远不够的。如果你想要成为
java web开发 高并发处理
BreakingBad
java Web 并发 开发 处理 高
java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,java高负载数据) 一:高并发高负载类网站关注点之数据库 没错,首先是数据库,这是大多数应用所面临的首个SPOF。尤其是Web2.0的应用,数据库的响应是首先要解决的。 一般来说MySQL是最常用的,可能最初是一个mysql主机,当数据增加到100万以上,那么,MySQL的效能急剧下降。常用的优化措施是M-S(
mysql批量更新
ekian
mysql
mysql更新优化:
一版的更新的话都是采用update set的方式,但是如果需要批量更新的话,只能for循环的执行更新。或者采用executeBatch的方式,执行更新。无论哪种方式,性能都不见得多好。
三千多条的更新,需要3分多钟。
查询了批量更新的优化,有说replace into的方式,即:
replace into tableName(id,status) values
微软BI(3)
18289753290
微软BI SSIS
1)
Q:该列违反了完整性约束错误;已获得 OLE DB 记录。源:“Microsoft SQL Server Native Client 11.0” Hresult: 0x80004005 说明:“不能将值 NULL 插入列 'FZCHID',表 'JRB_EnterpriseCredit.dbo.QYFZCH';列不允许有 Null 值。INSERT 失败。”。
A:一般这类问题的存在是
Java中的List
g21121
java
List是一个有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。
与 set 不同,列表通常允许重复
读书笔记
永夜-极光
读书笔记
1. K是一家加工厂,需要采购原材料,有A,B,C,D 4家供应商,其中A给出的价格最低,性价比最高,那么假如你是这家企业的采购经理,你会如何决策?
传统决策: A:100%订单 B,C,D:0%
&nbs
centos 安装 Codeblocks
随便小屋
codeblocks
1.安装gcc,需要c和c++两部分,默认安装下,CentOS不安装编译器的,在终端输入以下命令即可yum install gccyum install gcc-c++
2.安装gtk2-devel,因为默认已经安装了正式产品需要的支持库,但是没有安装开发所需要的文档.yum install gtk2*
3. 安装wxGTK
yum search w
23种设计模式的形象比喻
aijuans
设计模式
1、ABSTRACT FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:
开发管理 CheckLists
aoyouzi
开发管理 CheckLists
开发管理 CheckLists(23) -使项目组度过完整的生命周期
开发管理 CheckLists(22) -组织项目资源
开发管理 CheckLists(21) -控制项目的范围开发管理 CheckLists(20) -项目利益相关者责任开发管理 CheckLists(19) -选择合适的团队成员开发管理 CheckLists(18) -敏捷开发 Scrum Master 工作开发管理 C
js实现切换
百合不是茶
JavaScript 栏目切换
js主要功能之一就是实现页面的特效,窗体的切换可以减少页面的大小,被门户网站大量应用思路:
1,先将要显示的设置为display:bisible 否则设为none
2,设置栏目的id ,js获取栏目的id,如果id为Null就设置为显示
3,判断js获取的id名字;再设置是否显示
代码实现:
html代码:
<di
周鸿祎在360新员工入职培训上的讲话
bijian1013
感悟 项目管理 人生 职场
这篇文章也是最近偶尔看到的,考虑到原博客发布者可能将其删除等原因,也更方便个人查找,特将原文拷贝再发布的。“学东西是为自己的,不要整天以混的姿态来跟公司博弈,就算是混,我觉得你要是能在混的时间里,收获一些别的有利于人生发展的东西,也是不错的,看你怎么把握了”,看了之后,对这句话记忆犹新。 &
前端Web开发的页面效果
Bill_chen
html Web Microsoft
1.IE6下png图片的透明显示:
<img src="图片地址" border="0" style="Filter.Alpha(Opacity)=数值(100),style=数值(3)"/>
或在<head></head>间加一段JS代码让透明png图片正常显示。
2.<li>标
【JVM五】老年代垃圾回收:并发标记清理GC(CMS GC)
bit1129
垃圾回收
CMS概述
并发标记清理垃圾回收(Concurrent Mark and Sweep GC)算法的主要目标是在GC过程中,减少暂停用户线程的次数以及在不得不暂停用户线程的请夸功能,尽可能短的暂停用户线程的时间。这对于交互式应用,比如web应用来说,是非常重要的。
CMS垃圾回收针对新生代和老年代采用不同的策略。相比同吞吐量垃圾回收,它要复杂的多。吞吐量垃圾回收在执
Struts2技术总结
白糖_
struts2
必备jar文件
早在struts2.0.*的时候,struts2的必备jar包需要如下几个:
commons-logging-*.jar Apache旗下commons项目的log日志包
freemarker-*.jar  
Jquery easyui layout应用注意事项
bozch
jquery 浏览器 easyui layout
在jquery easyui中提供了easyui-layout布局,他的布局比较局限,类似java中GUI的border布局。下面对其使用注意事项作简要介绍:
如果在现有的工程中前台界面均应用了jquery easyui,那么在布局的时候最好应用jquery eaysui的layout布局,否则在表单页面(编辑、查看、添加等等)在不同的浏览器会出
java-拷贝特殊链表:有一个特殊的链表,其中每个节点不但有指向下一个节点的指针pNext,还有一个指向链表中任意节点的指针pRand,如何拷贝这个特殊链表?
bylijinnan
java
public class CopySpecialLinkedList {
/**
* 题目:有一个特殊的链表,其中每个节点不但有指向下一个节点的指针pNext,还有一个指向链表中任意节点的指针pRand,如何拷贝这个特殊链表?
拷贝pNext指针非常容易,所以题目的难点是如何拷贝pRand指针。
假设原来链表为A1 -> A2 ->... -> An,新拷贝
color
Chen.H
JavaScript html css
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML> <HEAD>&nbs
[信息与战争]移动通讯与网络
comsci
网络
两个坚持:手机的电池必须可以取下来
光纤不能够入户,只能够到楼宇
建议大家找这本书看看:<&
oracle flashback query(闪回查询)
daizj
oracle flashback query flashback table
在Oracle 10g中,Flash back家族分为以下成员:
Flashback Database
Flashback Drop
Flashback Table
Flashback Query(分Flashback Query,Flashback Version Query,Flashback Transaction Query)
下面介绍一下Flashback Drop 和Flas
zeus持久层DAO单元测试
deng520159
单元测试
zeus代码测试正紧张进行中,但由于工作比较忙,但速度比较慢.现在已经完成读写分离单元测试了,现在把几种情况单元测试的例子发出来,希望有人能进出意见,让它走下去.
本文是zeus的dao单元测试:
1.单元测试直接上代码
package com.dengliang.zeus.webdemo.test;
import org.junit.Test;
import o
C语言学习三printf函数和scanf函数学习
dcj3sjt126com
c printf scanf language
printf函数
/*
2013年3月10日20:42:32
地点:北京潘家园
功能:
目的:
测试%x %X %#x %#X的用法
*/
# include <stdio.h>
int main(void)
{
printf("哈哈!\n"); // \n表示换行
int i = 10;
printf
那你为什么小时候不好好读书?
dcj3sjt126com
life
dady, 我今天捡到了十块钱, 不过我还给那个人了
good girl! 那个人有没有和你讲thank you啊
没有啦....他拉我的耳朵我才把钱还给他的, 他哪里会和我讲thank you
爸爸, 如果地上有一张5块一张10块你拿哪一张呢....
当然是拿十块的咯...
爸爸你很笨的, 你不会两张都拿
爸爸为什么上个月那个人来跟你讨钱, 你告诉他没
iptables开放端口
Fanyucai
linux iptables 端口
1,找到配置文件
vi /etc/sysconfig/iptables
2,添加端口开放,增加一行,开放18081端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 18081 -j ACCEPT
3,保存
ESC
:wq!
4,重启服务
service iptables
Ehcache(05)——缓存的查询
234390216
排序 ehcache 统计 query
缓存的查询
目录
1. 使Cache可查询
1.1 基于Xml配置
1.2 基于代码的配置
2 指定可搜索的属性
2.1 可查询属性类型
2.2 &
通过hashset找到数组中重复的元素
jackyrong
hashset
如何在hashset中快速找到重复的元素呢?方法很多,下面是其中一个办法:
int[] array = {1,1,2,3,4,5,6,7,8,8};
Set<Integer> set = new HashSet<Integer>();
for(int i = 0
使用ajax和window.history.pushState无刷新改变页面内容和地址栏URL
lanrikey
history
后退时关闭当前页面
<script type="text/javascript">
jQuery(document).ready(function ($) {
if (window.history && window.history.pushState) {
应用程序的通信成本
netkiller.github.com
虚拟机 应用服务器 陈景峰 netkiller neo
应用程序的通信成本
什么是通信
一个程序中两个以上功能相互传递信号或数据叫做通信。
什么是成本
这是是指时间成本与空间成本。 时间就是传递数据所花费的时间。空间是指传递过程耗费容量大小。
都有哪些通信方式
全局变量
线程间通信
共享内存
共享文件
管道
Socket
硬件(串口,USB) 等等
全局变量
全局变量是成本最低通信方法,通过设置
一维数组与二维数组的声明与定义
恋洁e生
二维数组 一维数组 定义 声明 初始化
/** * */ package test20111005; /** * @author FlyingFire * @date:2011-11-18 上午04:33:36 * @author :代码整理 * @introduce :一维数组与二维数组的初始化 *summary: */ public c
Spring Mybatis独立事务配置
toknowme
mybatis
在项目中有很多地方会使用到独立事务,下面以获取主键为例
(1)修改配置文件spring-mybatis.xml <!-- 开启事务支持 --> <tx:annotation-driven transaction-manager="transactionManager" /> &n
更新Anadroid SDK Tooks之后,Eclipse提示No update were found
xp9802
eclipse
使用Android SDK Manager 更新了Anadroid SDK Tooks 之后,
打开eclipse提示 This Android SDK requires Android Developer Toolkit version 23.0.0 or above, 点击Check for Updates
检测一会后提示 No update were found