开发与部署分开 在WLP81中,可以在WORKSHOP中定义Portal,也可以在Admin Tool中中定义Portal.究竟有怎么区别呢? 原来WLP81与WLP70不一样,建议把应用的开发与最终的发布分开.即在workshop中把应用的所有portlet都开发,调试通过后,然后在WLP81的Admin Tool中定义portal,desktop. 最终发布出去的是在Admin Tool中定义desktop. 最终用户通过访问desktop来访问portal 应用.
如何集成其他Web系统 如果要把其他的基于BS结构开发的Web系统集成到WLP81中,有以下几中方式. 1. Kapow 他是WLP81自带的组件.可以把一个网页的全部或裁剪网页的一部分,在WLP81的portlet中显示出来. 2. 采用WLP81带的JSP Tag: <es:uriContent> 3. 采用IFRAME 4. 采用Apache web scraping package
如何集成其他CS结构的系统 如果要在WLP81中集成CS结构的系统,个人认为主要有以下几种方式: 1. 在JSP中调用Web Service,Tuxedo Service,DCOM,CORBA等组件 把要集成的部分包装成Web Service,Tuxedo Service,DCOM, CORBA等组件.然后通过在JSP中调用这些组件来把内容在WEB 页面上展示出来. 2. JAVA API 如果这些CS结构的系统有JAVA API.那么可以在JSP中通过调用如果这些CS结构的系统有JAVA API来把中调用这些组件来把内容在WEB 页面上展示出来 3. Citrix公司的MetaFrame Portlet MetaFrame是Citrix公司所开发的一款解决远程访问相关问题的优秀产品,MetaFrame实现了基于服务器的计算机构---使得远程用户能够使用任何类型的终端系统,通过任何类型的网络连接,使用远程服务器上的任何应用程序。 MetaFrame产品采用了MultiWin和ICA两种主要技术。MultiWin允许多个用户可以同时使用某个应用程序;ICA(Independent Computing Architecture)可以将应用的逻辑与界面分开。这两种技术的结合,使得应用程序可以随时随处发布,不再受客户端和连接性能的限制。 用户甚至能够使用同一个终端系统访问甚至远程多个不同平台、不同网络协议服务器上的多个应用,这些应用被集成在一个访问界面中,操作简便。详细资料参见: http://www.achieva.com.cn/product/citrix/
Portlet的最大化,最小化等图片出不来 如果访问WLP81的Portal应用,无法显示Portlet的最大化,最小化等图片,可通过下面的方法解决: 1. 在%web-app%/framework/skins下增加一个名为zh的文件夹,然后skins目录下原有的文件夹(及所有文件)拷贝至zh文件夹内。 2. 在WEB-INF下面的netuix-config.xml下增加以下一段 <!--resoule the chinese problem --> <localization> <enable>true</enable> <default-locale language = "en"/> </localization>
替换header中的图片 如果要替换Portal Header中的图片,方法如下:从sample portal的framework/markup/shell中导入HeaderFooterVisitor.shell,右击desktop,从弹出菜单中选择shell/HeaderFooterVisitor.shell,然后双击Header,生成header.jsp,修改header.jsp即可。如果footer出不来,需要在shell文件中加入: <netuix:footer> <netuix:jspContent contentUri="/footer.jsp"/> </netuix:footer> 然后将shell替换为原来的shell,再替换为新shell就可以。
设置Portal Domain的启动选项 在Portal Domain的启动脚本startweblogic.cmd中,通过设置下面的flag的值,来决定Portal Domain的启动选项。
set DB_DB=workshop set debugFlag=false set specialFlag=false set WLS_PRODUCTION_MODE=true set testConsoleFlag=true set iterativeDevFlag=true set logErrorsToConsoleFlag=true set pointbaseFlag=true set profileFlag=false set doExitFlag=true set verboseLoggingFlag=false set memmax=-Xmx512m
关闭portal的搜索引擎 如果你觉的Portal的搜索引擎没怎么用,可以把它关闭,方法如下:在Portal Domain的启动脚本startweblogic.cmd中,在下面的语句前加rem,注释掉。这样可以提高系统的性能。
rem start "Start Portal SearchEngine" /MIN cmd /c call "%WLP_HOME%\thirdparty\search\startSearchEngine.cmd" rem start "Stop Portal SearchEngine" /MIN cmd /c call"%WLP_HOME%\thirdparty\search\stopSearchEngine.cmd"
WLP81对IE的要求 WLP81必须配合IE60才行,如果是IE50,在浏览Portal应用,或进入Portal Admin Tool时,会抛出下面的Exception。可从此处下载IE60: http://www.microsoft.com/downloads/details.aspx?FamilyID=1e1550cb-5e5d-48f5-b02b-20b602228de6&DisplayLang=en
在WLP81中正确显示FLASH 1.可以通过FLASH PLUG-IN来显示。下面是一个例子: <table border="0" cellpadding="5" cellspacing="0" width="100%"> <tr> <td background="/sampleportal/images/bg.gif" width="100%" align="center"><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="320" height="60" hspace="80" align="middle"> <param name="movie" value="/sampleportal/images/test.swf"> <param name="quality" value="high"> <embed src="/sampleportal/images/test.swf" width="100%" height="80" hspace="20" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></embed></object> </td> </tr> </table>
2.通过WLP81的 Content Manager 把要显示的FLASH放到WLP81 CMS的REPOSITY中,然后通过CONTENT SELECTOR显示。例子如下:
<pz:contentSelector id="nodes" rule="xcj" /> <es:forEachInArray array="<%=nodes%>" id="node" type="com.bea.content.Node" > <ad:render id="node" height="200" width="400"/> </es:forEachInArray>
要注意的是: *.SEL文件应放到GlobalContentSelectors目录下,不要放到contentselectors目录下,否则,虽然在Content preview中可以显示,但在运行环境下无法显示.
从WLP81的CMS中取内容并显示 下面的代码通过Content selector从WLP81的CMS中查询满足条件的文件,并在浏览器中显示。如是文件的filetype值是img就直接显示。如是文件的filetype值是doc就显示超联接。
<pz:contentSelector id="nodes" rule="sampleRule" /> <es:forEachInArray array="<%=nodes%>" id="node" type="com.bea.content.Node" > <cm:getProperty node="<%=node%>" name="filetype" resultId="type" default="doc" />
<% String fileType=type.toString(); if (fileType.equals("[img]")) { String simg = "<img src= ' " + "/Sampleportal/ShowBinary" + node.getPath() + "'>"; out.println(simg); %>
<% }
else if(fileType.equals("[doc]")) { String simg="<a href='http://localhost:7001/sampleportal/ShowBinary"+node.getPath()+"' target='_blank' >预览下载</a>"; out.println(simg); } %> </es:forEachInArray>
在IE浏览器中直接输入 http://localhost:7001/sampleportal/ShowBinary/BEA+Repository/mynode 可用来检查是否可以正确显示CMS中的内容。Mynode为相应节点的名称。
让WLP81正确处理中文 为了让WLP81能正确处理中文,需要设置下面几个地方。 1. 在web.xml中 <context-param> <param-name>weblogic.httpd.inputCharset./*</param-name> <param-value>GBK</param-value> </context-param>
2. 在weblogic.xml中 <jsp-descriptor> <jsp-param> <param-name>encoding</param-name> <param-value>GBK</param-value> </jsp-param> </jsp-descriptor>
3.修改*.portal文件的编码 可在ultraEdit中打开*.portal文件 修改其中的 <portal:directive.page contentType="text/html;charset=UTF-8"/>为 <portal:directive.page contentType="text/html;charset=GBK"/> 如果修改后,有一些JSP文件无法打开,可在ultraEdit中打开,把代码COPY 到Workshop 的source View中.
4.修改Workshop的编码
在代码中设置Page,Portlet的属性 在开发时,可以在Workshop的property Editor中设置page, portlet的属性.在代码中可以通过下面的方法设置或取得page, portlet的属性. try { PageBackingContext page = PageBackingContext.getPageBackingContext(getRequest()); System.out.println("\n\n\n\n\ntitle=[" + page.getTitle()+"]"); title=page.getTitle();
} catch(Exception e) { e.printStackTrace(); } 如果把上面的page替换成portlet就可以得到portlet的属性
使PAGE折行显示 如果一个portal应用的page太多,默认只会显示为一行,太长.可修改文件framework/skeletons/default/singlelevelmenu.jsp,使他可以折行显示.例子如下:
int pageNum=0; while (pages.hasNext()) { pageNum++; if(pageNum %15 ==0) { System.out.println("pageNum=" + pageNum); out.println("<br><br>"); }
在WLP81中实现文件上传 可以通过Page Flow实现文件上传. 在JSP中,通过<netui:fileUpload>显示文件上传窗口. <netui:fileUpload dataSource="{actionForm.file}" size="50" accept="*/*" ></netui:fileUpload> 在jpf文件中可通过如下方式读取上传的文件,并保存到新的目录下. try { if(!form.getFile().equals("")) { InputStream is = form.getFile().getInputStream(); String fileName = form.getFile().getFileName(); FileOutputStream os = new FileOutputStream(new File(uploadFolder+fileName)); byte b[] = new byte[128]; while(is.read(b)!=-1){ os.write(b); } is.close(); os.close(); } } catch(Exception e){ e.printStackTrace(); } 如果有中文问题,可以把该Page Flow 放到Iframe中. |