﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-　　　　　　　　　　　　　彬 ^_^ -随笔分类-Liferay</title><link>http://www.blogjava.net/libin2722/category/29634.html</link><description>虚其心，可解天下之问；专其心，可治天下之学；静其心，可悟天下之理；恒其心，可成天下之业。</description><language>zh-cn</language><lastBuildDate>Wed, 26 Mar 2008 15:35:46 GMT</lastBuildDate><pubDate>Wed, 26 Mar 2008 15:35:46 GMT</pubDate><ttl>60</ttl><item><title>深入浅出Liferay Portal (11) </title><link>http://www.blogjava.net/libin2722/archive/2008/03/14/186282.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Fri, 14 Mar 2008 06:15:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/03/14/186282.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/186282.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/03/14/186282.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/186282.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/186282.html</trackback:ping><description><![CDATA[&nbsp;
<p><strong>类的层次关系</strong></p>
<p>MainServlet<br />
&nbsp;ActionServlet<br />
&nbsp;&nbsp;HttpServlet<br />
&nbsp;&nbsp;&nbsp;GenericServlet<br />
&nbsp;&nbsp;&nbsp;&nbsp;Object</p>
<p>PortalRequestProcessor<br />
PortletRequestProcessor<br />
&nbsp;TilesRequestProcessor<br />
&nbsp;&nbsp;RequestProcessor<br />
&nbsp;&nbsp;&nbsp;Object</p>
<p>StrutsPortlet<br />
JSPPortlet<br />
&nbsp;LiferayPortlet<br />
&nbsp;VelocityPortlet<br />
&nbsp;&nbsp;GenericPortlet<br />
&nbsp;&nbsp;&nbsp;Object</p>
<p>&nbsp;</p>
<p><strong>Liferay web 应用的文件结构</strong></p>
<p>html<br />
&nbsp;common<br />
&nbsp;&nbsp;error.jsp<br />
&nbsp;&nbsp;forward_common.jsp<br />
&nbsp;&nbsp;forward_js.jsp<br />
&nbsp;&nbsp;init.jsp<br />
&nbsp;&nbsp;themes<br />
&nbsp;&nbsp;&nbsp;bottom.jsp<br />
&nbsp;&nbsp;&nbsp;portal.jsp<br />
&nbsp;&nbsp;&nbsp;portlet.jsp<br />
&nbsp;&nbsp;&nbsp;portlet_content.jspf<br />
&nbsp;&nbsp;&nbsp;top_head.jsp<br />
&nbsp;&nbsp;&nbsp;top_js.jspf<br />
&nbsp;&nbsp;&nbsp;top_messages.jsp<br />
&nbsp;&nbsp;&nbsp;....<br />
&nbsp;js<br />
&nbsp;&nbsp;everthing_unpacked.js<br />
&nbsp;&nbsp;jquery<br />
&nbsp;&nbsp;&nbsp;cookie.js<br />
&nbsp;&nbsp;&nbsp;dimentions.js<br />
&nbsp;&nbsp;&nbsp;hover_intent.js<br />
&nbsp;&nbsp;&nbsp;jeditable.js<br />
&nbsp;&nbsp;&nbsp;jquery.js<br />
&nbsp;&nbsp;&nbsp;json.js<br />
&nbsp;&nbsp;&nbsp;...<br />
&nbsp;&nbsp;liferay<br />
&nbsp;&nbsp;&nbsp;ajax.js<br />
&nbsp;&nbsp;&nbsp;animate.js<br />
&nbsp;&nbsp;&nbsp;auto_field.js<br />
&nbsp;&nbsp;&nbsp;browser.js<br />
&nbsp;&nbsp;&nbsp;column.js<br />
&nbsp;&nbsp;&nbsp;dock.js<br />
&nbsp;&nbsp;&nbsp;layout.js<br />
&nbsp;&nbsp;&nbsp;layout_configuration.js<br />
&nbsp;&nbsp;&nbsp;ldrag.js<br />
&nbsp;&nbsp;&nbsp;liferay.js<br />
&nbsp;&nbsp;&nbsp;navigation.js<br />
&nbsp;&nbsp;&nbsp;popup.js<br />
&nbsp;&nbsp;&nbsp;portal.js<br />
&nbsp;&nbsp;&nbsp;portlet.js<br />
&nbsp;&nbsp;&nbsp;service_unpacked.js<br />
&nbsp;&nbsp;&nbsp;session.js<br />
&nbsp;&nbsp;&nbsp;util.js<br />
&nbsp;&nbsp;&nbsp;...<br />
&nbsp;portal<br />
&nbsp;&nbsp;change_password.jsp<br />
&nbsp;&nbsp;css_cached.jsp<br />
&nbsp;&nbsp;error.jsp<br />
&nbsp;&nbsp;expire_session.jsp<br />
&nbsp;&nbsp;flash.jsp<br />
&nbsp;&nbsp;init.jsp<br />
&nbsp;&nbsp;layout.jsp<br />
&nbsp;&nbsp;load_render_portlet.jsp<br />
&nbsp;&nbsp;login.jsp<br />
&nbsp;&nbsp;render_portlet.jsp<br />
&nbsp;&nbsp;terms_of_use.jsp<br />
&nbsp;&nbsp;...<br />
&nbsp;portlet<br />
&nbsp;&nbsp;...<br />
&nbsp;taglib<br />
&nbsp;&nbsp;portlet<br />
&nbsp;&nbsp;theme<br />
&nbsp;&nbsp;ui<br />
&nbsp;&nbsp;init.jsp<br />
&nbsp;themes<br />
&nbsp;&nbsp;_styled<br />
&nbsp;&nbsp;_unstyled<br />
&nbsp;&nbsp;brochure<br />
&nbsp;&nbsp;classic<br />
&nbsp;&nbsp;desktop<br />
&nbsp;&nbsp;genesis<br />
&nbsp;&nbsp;&nbsp;_diffs<br />
&nbsp;&nbsp;&nbsp;css<br />
&nbsp;&nbsp;&nbsp;&nbsp;base.css<br />
&nbsp;&nbsp;&nbsp;&nbsp;custom.css<br />
&nbsp;&nbsp;&nbsp;&nbsp;everthing_unpacked.css<br />
&nbsp;&nbsp;&nbsp;&nbsp;layout.css<br />
&nbsp;&nbsp;&nbsp;&nbsp;main.css<br />
&nbsp;&nbsp;&nbsp;&nbsp;portlet.css<br />
&nbsp;&nbsp;&nbsp;&nbsp;...<br />
&nbsp;&nbsp;&nbsp;images<br />
&nbsp;&nbsp;&nbsp;javascript<br />
&nbsp;&nbsp;&nbsp;&nbsp;javascript.js<br />
&nbsp;&nbsp;&nbsp;templates<br />
&nbsp;&nbsp;&nbsp;&nbsp;dock.vm<br />
&nbsp;&nbsp;&nbsp;&nbsp;init_custom.vm<br />
&nbsp;&nbsp;&nbsp;&nbsp;navigation.vm<br />
&nbsp;&nbsp;&nbsp;&nbsp;portal_normal.vm<br />
&nbsp;&nbsp;&nbsp;&nbsp;portal_pop_up.vm<br />
&nbsp;&nbsp;&nbsp;&nbsp;portlet.vm&nbsp; <br />
</p>
&nbsp;<br />
<br />
<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2177431</p>
<img src ="http://www.blogjava.net/libin2722/aggbug/186282.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-03-14 14:15 <a href="http://www.blogjava.net/libin2722/archive/2008/03/14/186282.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入浅出Liferay Portal (12)  </title><link>http://www.blogjava.net/libin2722/archive/2008/03/14/186285.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Fri, 14 Mar 2008 06:15:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/03/14/186285.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/186285.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/03/14/186285.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/186285.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/186285.html</trackback:ping><description><![CDATA[&nbsp;
<p>谈了这么多，还没说怎么自己往Liferay中创建和加入一个portlet，Liferay中定义了几种类型的portlet，如JSPPortlet，StrutsPortlet，和VelocityPortlet。先以JSPPortlet为例说明吧。</p>
<p><strong>1. 定义新的JSP Portlet</strong></p>
<p>a) 首先到 ...\portlet\ext中去加入自己要创建的portlet文件夹，例如myappletportlet，在文件夹中创建一个view.jsp，其中的内容可最简单为：</p>
<p>Hello JSPPortlet world!</p>
<p>最好的起始学习方法应该是照葫芦画瓢吧，找一个已有的portlet，看它的结构和代码。</p>
<p>b) 到 ...\WEB-INF\portlet-ext.xml 中加入<br />
&lt;portlet&gt;<br />
&nbsp;&lt;portlet-name&gt;EXT_2&lt;/portlet-name&gt;<br />
&nbsp;&lt;!-- portlet 的最关键ID --&gt;</p>
<p>&nbsp;&lt;display-name&gt;My AppletPortlet&lt;/display-name&gt;</p>
<p>&nbsp;&lt;portlet-class&gt;com.liferay.portlet.JSPPortlet&lt;/portlet-class&gt;<br />
&nbsp;&lt;!-- portlet 所属的类 --&gt;</p>
<p>&nbsp;&lt;init-param&gt;<br />
&nbsp;&nbsp;&lt;name&gt;view-jsp&lt;/name&gt;<br />
&nbsp;&nbsp;&lt;value&gt;/portlet/ext/myappletportlet/view.jsp&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;!-- MVC中会直接传递到view.jsp --&gt;<br />
&nbsp;&lt;/init-param&gt;<br />
&nbsp;&lt;expiration-cache&gt;300&lt;/expiration-cache&gt;<br />
&nbsp;&lt;supports&gt;<br />
&nbsp;&nbsp;&lt;mime-type&gt;text/html&lt;/mime-type&gt;<br />
&nbsp;&lt;/supports&gt;<br />
&nbsp;&lt;portlet-info&gt;<br />
&nbsp;&nbsp;&lt;title&gt;PENG Portlet&lt;/title&gt;<br />
&nbsp;&nbsp;&lt;!-- Portlet上显示的名字 --&gt;<br />
&nbsp;&lt;/portlet-info&gt;<br />
&nbsp;&lt;security-role-ref&gt;<br />
&nbsp;&nbsp;&lt;role-name&gt;Power User&lt;/role-name&gt;<br />
&nbsp;&lt;/security-role-ref&gt;<br />
&nbsp;&lt;security-role-ref&gt;<br />
&nbsp;&nbsp;&lt;role-name&gt;User&lt;/role-name&gt;<br />
&nbsp;&lt;/security-role-ref&gt;<br />
&lt;/portlet&gt;</p>
<p>c) 到 ...\WEB-INF\liferay-portlet-ext.xml 中加入</p>
<p>&lt;portlet&gt;<br />
&nbsp;&lt;portlet-name&gt;EXT_2&lt;/portlet-name&gt;<br />
&lt;/portlet&gt;</p>
<p>d) 到...\WEB-INF\liferay-display.xml 中加入以下代码，以将EXT_2加入sample分类，到时候在Add Content时可以在这个sample组找到，否则在undefined中找。</p>
<p>&lt;category name="category.sample"&gt;<br />
&nbsp;&lt;portlet id="47"/&gt;<br />
&nbsp;......<br />
&nbsp;&lt;portlet id="EXT_2"/&gt;<br />
&lt;/category&gt;</p>
<p>e) 测试。如果上述的修改是直接在tomcat目录中进行的话，重新启动tomcat。如果是在前面提到的自己创建的EXT环境下进行的话，先用ant一下，再启动tomcat。然后<a href="http://localhost:8080/">http://localhost:8080/</a>，用<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#116;&#101;&#115;&#116;&#64;&#108;&#105;&#102;&#101;&#114;&#97;&#121;&#46;&#99;&#111;&#109;&#47;&#116;&#101;&#115;&#116;">test@liferay.com/test</a>进去，选择Add Content，应该可以在sample目录下找到前面创建的那个portlet了：PENG Portlet。</p>
<p><br />
<strong>2. 定义新的StrutsPortlet。</strong>过程要略微复杂一些，谁叫我们要用传说中的MVC呢。先列出几个关键的配置文件：<br />
portlet-ext.xml: 定义portlet(JSR-168 attributes)<br />
liferay-portlet-ext.xml: 注册portlet(Liferay attributes)<br />
struts-config.xml: 定义 page-flow (action mapping)<br />
tiles-defs.xml: 定义 the page layout<br />
更详细的信息可从Liferay的官方网站上获得。</p>
<p>a) 在ext中增加一个叫做Tiles的portlet文件夹，在其中创建一个view.jsp。内容可以简单为：</p>
<p>Hello StrutsPortlet world!</p>
<p>b) Portlet-ext.xml 中加入<br />
&lt;portlet&gt;<br />
&nbsp;&lt;portlet-name&gt;EXT_3&lt;/portlet-name&gt;<br />
&nbsp;&lt;display-name&gt;Tiles&lt;/display-name&gt;<br />
&nbsp;&lt;portlet-class&gt;<br />
&nbsp;&nbsp;com.liferay.portlet.StrutsPortlet<br />
&nbsp;&nbsp;&lt;!—实现JSR-168规范的类 --&gt;<br />
&nbsp;&lt;/portlet-class&gt;</p>
<p>&nbsp;&lt;init-param&gt;<br />
&nbsp;&nbsp;&lt;name&gt;view-action&lt;/name&gt;<br />
&nbsp;&nbsp;&lt;value&gt;/ext/tiles/view&lt;/value&gt;<br />
&nbsp;&nbsp; &lt;!-- portal会到struts-config.xml中去寻找/ext/tiles/view --&gt;<br />
&nbsp;&lt;/init-param&gt;<br />
&nbsp;&lt;expiration-cache&gt;0&lt;/expiration-cache&gt;<br />
&nbsp;&lt;supports&gt;<br />
&nbsp;&nbsp;&lt;mime-type&gt;text/html&lt;/mime-type&gt;<br />
&nbsp;&lt;/supports&gt;<br />
&nbsp;&lt;resource-bundle&gt;<br />
&nbsp;&nbsp;com.liferay.portlet.StrutsResourceBundle<br />
&nbsp;&lt;/resource-bundle&gt;<br />
&nbsp;&lt;security-role-ref&gt;<br />
&nbsp;&nbsp;&lt;role-name&gt;user&lt;/role-name&gt;<br />
&nbsp;&lt;/security-role-ref&gt;<br />
&lt;/portlet&gt;</p>
<p><br />
c) liferay-portlet-ext.xml中加入</p>
<p>&lt;portlet&gt;<br />
&nbsp;&lt;portlet-name&gt;EXT_3&lt;/portlet-name&gt;<br />
&nbsp;&lt;struts-path&gt;ext/tiles&lt;/struts-path&gt;<br />
&nbsp;&lt;!-- 告诉portal所有带有ext/tiles/*路径的请求可以认为是这个portlet的范围 --&gt;<br />
&nbsp;&lt;use-default-template&gt;false&lt;/use-default-template&gt;<br />
&nbsp;&lt;!-- 因为将采用别的template，所以设置为false。将要使用的template在tiles-defs.xml中定义。--&gt;<br />
&lt;/portlet&gt;</p>
<p><br />
d) struts-config-ext.xml中加入</p>
<p>&lt;action path="/ext/tiles/view"<br />
&nbsp;forward="portlet.ext.tiles.view" /&gt;<br />
&lt;!-- Struts 将会在 tiles-defs.xml 中寻找 portlet.ext.tiles.view --&gt;</p>
<p>e) 在tiles-defs-ext.xml 中加入</p>
<p>&lt;definition name="portlet.ext.tiles.view" extends="portlet"&gt;<br />
&lt;!-- 定义了哪个 template 将被使用，这里是portlet template。这个template 定义了portlet的borders和buttons（例如minimize, maximize, close 等等）。 --&gt;</p>
<p>&lt;put name="portlet_content" value="/portlet/ext/tiles/view.jsp" /&gt;<br />
&nbsp;&lt;!-- portlet_content 是一个liferay的变量，portal可以使用这个变量来决定在portlet中会呈现什么内容。这里portlet的内容就是view.jsp。 --&gt;<br />
&lt;/definition&gt;</p>
<p>f) 测试。 <br />
</p>
&nbsp;<br />
<br />
<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2177436</p>
<img src ="http://www.blogjava.net/libin2722/aggbug/186285.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-03-14 14:15 <a href="http://www.blogjava.net/libin2722/archive/2008/03/14/186285.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入浅出Liferay Portal (9) </title><link>http://www.blogjava.net/libin2722/archive/2008/03/14/186280.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Fri, 14 Mar 2008 06:14:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/03/14/186280.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/186280.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/03/14/186280.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/186280.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/186280.html</trackback:ping><description><![CDATA[&nbsp;
<p>前面分析了在页面上增加一个portlet的服务器端的具体实现，现在分析其在浏览器端的实现，JavaScript要出场了。<br />
前面提到在Add Content中点击某个portlet的"Add"按钮，其实就是调用了addPortlet(...)方法。</p>
<p><strong>top_js.jspf</strong><br />
------------------</p>
<p><strong>function addPortlet(plid, portletId, doAsUserId)</strong> {</p>
<p>&nbsp; var refreshPortletList = <font color="#ff0000">getRefreshPortletList</font>();</p>
<p>&nbsp; if (refreshPortletList["_" + portletId]) {<br />
&nbsp;&nbsp;&nbsp; self.location = "&lt;%= themeDisplay.getPathMain() %&gt;/portal/update_layout?p_l_id=" + plid + "&amp;p_p_id=" + portletId + "&amp;doAsUserId=" + doAsUserId + "&amp;&lt;%= </p>
<p>Constants.CMD %&gt;=&lt;%= Constants.ADD %&gt;&amp;referer=&lt;%= HttpUtil.encodeURL(currentURL) %&gt;&amp;refresh=1";<br />
&nbsp; }<br />
&nbsp; <br />
&nbsp; else {<br />
&nbsp;&nbsp;&nbsp; var loadingDiv = document.createElement("div");<br />
&nbsp;&nbsp;&nbsp; var container = document.getElementById("layout-column_column-1");</p>
<p>&nbsp;&nbsp;&nbsp; if (container == null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; loadingDiv.className = "loading-animation";</p>
<p>&nbsp;&nbsp;&nbsp; container.appendChild(loadingDiv);</p>
<p>&nbsp;&nbsp;&nbsp; var queryString = "&lt;%= themeDisplay.getPathMain() %&gt;/portal/update_layout?p_l_id=" + plid + "&amp;p_p_id=" + portletId + "&amp;doAsUserId=" + doAsUserId + "&amp;&lt;%= </p>
<p>Constants.CMD %&gt;=&lt;%= Constants.ADD %&gt;&amp;currentURL=&lt;%= HttpUtil.encodeURL(currentURL) %&gt;";</p>
<p><font color="#339966">&nbsp;&nbsp;&nbsp; /* queryString = /c/portal/update_layout?p_l_id=10102&amp;p_p_id=reports&amp;doAsUserId=&amp;cmd=add&amp;currentURL=%2Fweb%2Fguest%2Fhome */<br />
&nbsp;&nbsp;&nbsp; /* 这就是最终发送往服务器端的数据了，刚好可以与前面所分析的服务器端收到/c/portal/update_layout后的处理流程对应起来了。*/</font></p>
<p>&nbsp;&nbsp;&nbsp; <font color="#ff0000">addPortletHTML</font>(queryString, loadingDiv);<br />
&nbsp; }<br />
}</p>
<p><br />
<strong>portlet_js.jspf</strong><br />
--------------------</p>
<p><strong>function getRefreshPortletList()</strong> {</p>
<p>&nbsp; &lt;%<br />
&nbsp; List allPortlets = PortletLocalServiceUtil.getPortlets(company.getCompanyId(), false, false);<br />
&nbsp; <br />
&nbsp; List nonAjaxPortlets = new ArrayList();</p>
<p>&nbsp; for (int i = 0; i &lt; allPortlets.size(); i++) {<br />
&nbsp;&nbsp;&nbsp; Portlet portlet = (Portlet)allPortlets.get(i);</p>
<p>&nbsp;&nbsp;&nbsp; if (!portlet.isAjaxable()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nonAjaxPortlets.add(portlet.getPortletId());<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; }</p>
<p>&nbsp; StringMaker portletList = new StringMaker();</p>
<p>&nbsp; for (int i = 0; i &lt; nonAjaxPortlets.size(); i++) {<br />
&nbsp;&nbsp;&nbsp; portletList.append("_");<br />
&nbsp;&nbsp;&nbsp; portletList.append(nonAjaxPortlets.get(i));<br />
&nbsp;&nbsp;&nbsp; portletList.append(":true");<br />
&nbsp;&nbsp;&nbsp; portletList.append((i &lt; nonAjaxPortlets.size() - 1) ? "," : "");<br />
&nbsp; }<br />
&nbsp;%&gt;</p>
<p>&nbsp; var refreshPortletList = { &lt;%= portletList.toString() %&gt; };<br />
&nbsp; return refreshPortletList;<br />
}</p>
<p><strong>function addPortletHTML(url, placeHolder)</strong> {</p>
<p>&nbsp; var <font color="#ff0000">addPortletReturn</font> = function(html) {</p>
<p>&nbsp;&nbsp;&nbsp; var container = placeHolder.parentNode;</p>
<p>&nbsp;&nbsp;&nbsp; var addDiv = document.createElement("div");</p>
<p>&nbsp;&nbsp;&nbsp; addDiv.style.display = "none";</p>
<p>&nbsp;&nbsp;&nbsp; addDiv.innerHTML = html;</p>
<p>&nbsp;&nbsp;&nbsp; var portletBound = jQuery(".portlet-boundary:first", addDiv).get(0);</p>
<p>&nbsp;&nbsp;&nbsp; portletBound.parentNode.removeChild(portletBound);</p>
<p>&nbsp;&nbsp;&nbsp; var portletId = portletBound.id;</p>
<p>&nbsp;&nbsp;&nbsp; portletId = portletId.replace(/^p_p_id_/,"");</p>
<p>&nbsp;&nbsp;&nbsp; portletId = portletId.replace(/_$/,"");</p>
<p>&nbsp;&nbsp;&nbsp; portletBound.portletId = portletId;</p>
<p>&nbsp;&nbsp;&nbsp; Liferay.Portlet.flagAjax(portletId);</p>
<p>&nbsp;&nbsp;&nbsp; container.replaceChild(portletBound, placeHolder);</p>
<p>&nbsp;&nbsp;&nbsp; Liferay.Util.evalScripts(addDiv);</p>
<p>&nbsp;&nbsp;&nbsp; if (!jQuery.browser.firefox) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Liferay.Util.evalScripts(portletBound);<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; &lt;c:if test="&lt;%= (layout != null) &amp;&amp; (LayoutPermissionUtil.contains(permissionChecker, layout, ActionKeys.UPDATE)) %&gt;"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!portletBound.isStatic) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (themeDisplay.isFreeformLayout()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Liferay.Freeform.add(portletBound);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Liferay.Columns.add(portletBound);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &lt;/c:if&gt;</p>
<p>&nbsp;&nbsp;&nbsp; if (jQuery.browser.firefox) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setTimeout("Liferay.Portlet.process(\"" + portletId + "\")", 0);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Liferay.Portlet.process(portletId);<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; Liferay.Util.addInputType(portletBound.id);<br />
&nbsp;&nbsp;&nbsp; Liferay.Util.addInputFocus(portletBound.id);</p>
<p>&nbsp;&nbsp;&nbsp; if (window.location.hash) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.location.hash = "p_" + portletId;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return portletId;<br />
&nbsp; };</p>
<p>&nbsp; <font color="#339966">/* addPortletHTML()生成一个Ajax Request，收到Ajax Response后调用addPortletReturn。*/<br />
</font>&nbsp; AjaxUtil.request(url, {<br />
&nbsp;&nbsp;onComplete: function(xmlHttpReq){<br />
&nbsp;&nbsp;&nbsp;<font color="#ff0000">addPortletReturn</font>(xmlHttpReq.responseText);<br />
&nbsp;&nbsp;}<br />
&nbsp; });<br />
}</p>
<p><font color="#339966">&nbsp; /* xmlHttpReq.responseText的内容就是该portlet要嵌入portal中的的HTML代码片段，如下图所示。在经过addPortletReturn()处理后完成portlet的添加工作*/</font></p>
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/lybra/html2.JPG" /></p>
&nbsp;<br />
<br />
<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2177414</p>
<img src ="http://www.blogjava.net/libin2722/aggbug/186280.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-03-14 14:14 <a href="http://www.blogjava.net/libin2722/archive/2008/03/14/186280.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入浅出Liferay Portal (10)  </title><link>http://www.blogjava.net/libin2722/archive/2008/03/14/186281.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Fri, 14 Mar 2008 06:14:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/03/14/186281.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/186281.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/03/14/186281.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/186281.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/186281.html</trackback:ping><description><![CDATA[&nbsp;
<p>通过分析知道基于Ajax的portlet的呈现过程，体现了Ajax技术的价值：异步处理局部数据。</p>
<p><strong>增加一个portlet</strong></p>
<p><strong>请求：</strong><br />
Hypertext Transfer Protocol<br />
&nbsp;&nbsp;&nbsp; POST /c/portal/update_layout HTTP/1.1\r\n<br />
&nbsp;&nbsp;&nbsp; Referer: <a href="http://10.108.10.205:8080/web/guest/home?p_p_id=EXT_1&amp;p_p_action=0&amp;p_p_state=normal&amp;%5Cr%5Cn">http://10.108.10.205:8080/web/guest/home?p_p_id=EXT_1&amp;p_p_action=0&amp;p_p_state=normal&amp;\r\n</a><br />
&nbsp;&nbsp;&nbsp; method: POST /c/portal/update_layout HTTP/1.1\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Type: application/x-www-form-urlencoded\r\n<br />
&nbsp;&nbsp;&nbsp; Accept-Encoding: gzip, deflate\r\n<br />
&nbsp;&nbsp;&nbsp; Host: 10.108.10.205:8080\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Length: 136<br />
&nbsp;&nbsp;&nbsp; Connection: Keep-Alive\r\n<br />
&nbsp;&nbsp;&nbsp; Cache-Control: no-cache\r\n<br />
&nbsp;&nbsp;&nbsp; Cookie: COOKIE_SUPPORT=true; <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#76;&#79;&#71;&#73;&#78;&#61;&#116;&#101;&#115;&#116;&#64;&#108;&#105;&#102;&#101;&#114;&#97;&#121;&#46;&#99;&#111;&#109;">LOGIN=test@liferay.com</a>; SCREEN_NAME=DkOc2AWkcEQ=; GUEST_LANGUAGE_ID=en_US; JSESSIONID=2DFE59B64996E95DE0C64BA609CF79D1\r\n<br />
&nbsp;&nbsp;&nbsp; \r\n<br />
Line-based text data: application/x-www-form-urlencoded<br />
&nbsp;&nbsp;&nbsp; p_l_id=10102&amp;p_p_id=EXT_1&amp;doAsUserId=&amp;cmd=add&amp;currentURL=%2Fweb%2Fguest%2Fhome%3Fp_p_id%3DEXT_1%26p_p_action%3D0%26p_p_state%3Dnormal%26</p>
<p><strong>响应：</strong><br />
Hypertext Transfer Protocol<br />
&nbsp;&nbsp;&nbsp; HTTP/1.1 200 OK\r\n<br />
&nbsp;&nbsp;&nbsp; Server: Apache-Coyote/1.1\r\n<br />
&nbsp;&nbsp;&nbsp; Set-Cookie: COOKIE_SUPPORT=true; Expires=Thu, 05-Mar-2009 07:53:59 GMT; Path=/\r\n<br />
&nbsp;&nbsp;&nbsp; Liferay-Portal: Liferay Enterprise Portal 4.3.3 (Owen / Build 4303 / October 9, 2007)\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Encoding: gzip\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Type: text/html;charset=UTF-8\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Length: 924<br />
&nbsp;&nbsp;&nbsp; Date: Wed, 05 Mar 2008 07:54:00 GMT\r\n<br />
&nbsp;&nbsp;&nbsp; \r\n<br />
&nbsp;&nbsp;&nbsp; Content-encoded entity body (gzip): 924 bytes -&gt; 2534 bytes<br />
Line-based text data: text/html<br />
&nbsp;&nbsp;&nbsp; &lt;div id="p_p_id_EXT_1_" class="portlet-boundary portlet-boundary_EXT_1_" &gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;a name="p_EXT_1"&gt;&lt;/a&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;div class="portlet" id="portlet-wrapper-EXT_1"&gt;\n<br />
&nbsp;&nbsp;&nbsp; &lt;div class="portlet-topper"&gt;\n<br />
&nbsp;&nbsp;&nbsp; &lt;span class="portlet-title"&gt;\n<br />
&nbsp;&nbsp;&nbsp;&nbsp; Reports\n<br />
&nbsp;&nbsp;&nbsp; &lt;/span&gt;\n<br />
&nbsp;&nbsp;&nbsp; &lt;div class="portlet-icons" id="portlet-small-icon-bar_EXT_1"&gt;\n<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \r<br />
&nbsp;&nbsp;&nbsp; &lt;a href="javascript: Liferay.PortletCSS.init('EXT_1');" target="_self"&gt;&lt;img align="absmiddle" border="0" </p>
<p>src="/html/themes/genesis/images/common/../portlet/portlet_css.png" title="Look and Feel" /&gt;&lt;/a&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;a href="javascript: self.location = 'http%3A%2F%2F10.108.10.205%3A8080%2Fweb%2Fguest%2Fhome%3Fp_p_id%3D86%26p_p_action%3D0%26p_p_state%3Dmaximized%</p>
<p>26_86_struts_action%3D%252Fportlet_configuration%252Fedit_permissions%26_86_redirect%3D%252<br />
&nbsp;&nbsp;&nbsp; &lt;span id="p_p_body_EXT_1_min_buttons"&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;a href="javascript: minimizePortlet('10102', 'EXT_1', false, '');"&gt;&lt;img align="absmiddle" border="0" </p>
<p>src="/html/themes/genesis/images/portlet/minimize.png" title="Minimize" /&gt;&lt;/a&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;/span&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;a href="<a href="http://10.108.10.205:8080/web/guest/home?p_p_id=EXT_1&amp;p_p_action=0&amp;p_p_state=maximized">http://10.108.10.205:8080/web/guest/home?p_p_id=EXT_1&amp;p_p_action=0&amp;p_p_state=maximized</a>&amp;" target="_self"&gt;&lt;img align="absmiddle" border="0" </p>
<p>src="/html/themes/genesis/images/common/../portlet/maximize.png" title="Maximize" /&gt;&lt;/a&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;a href="javascript: closePortlet('10102', 'EXT_1', '');" target="_self"&gt;&lt;img align="absmiddle" border="0" </p>
<p>src="/html/themes/genesis/images/common/../portlet/close.png" title="Remove" /&gt;&lt;/a&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;/div&gt;\n<br />
&nbsp;&nbsp;&nbsp; &lt;/div&gt;\n<br />
&nbsp;&nbsp;&nbsp; &lt;div class="portlet-content"&gt;\n<br />
&nbsp;&nbsp;&nbsp; &lt;div class="portlet-content-container" style=""&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;div&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;a href="<a href="http://10.108.10.205:8080/web/guest/home?p_p_id=EXT_1&amp;p_p_action=0&amp;p_p_state=maximized&amp;p_p_mode=view&amp;%22%3ETest">http://10.108.10.205:8080/web/guest/home?p_p_id=EXT_1&amp;p_p_action=0&amp;p_p_state=maximized&amp;p_p_mode=view&amp;"&gt;Test</a> 123&lt;/a&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;/div&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;/div&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;/div&gt;\n<br />
&nbsp;&nbsp;&nbsp; &lt;/div&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;/div&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;script type="text/javascript"&gt;\r<br />
&nbsp;&nbsp;&nbsp; document.getElementById("p_p_id_EXT_1_").portletId = "EXT_1";\r<br />
&nbsp;&nbsp;&nbsp; document.getElementById("p_p_id_EXT_1_").columnPos = 0;\r<br />
&nbsp;&nbsp;&nbsp; if (!Liferay.Portlet.isAjax("EXT_1")) {\r<br />
&nbsp;&nbsp;&nbsp; Liferay.Portlet.process("EXT_1");\r<br />
&nbsp;&nbsp;&nbsp; }\r<br />
&nbsp;&nbsp;&nbsp; jQuery(\r<br />
&nbsp;&nbsp;&nbsp; function() {\r<br />
&nbsp;&nbsp;&nbsp; Liferay.Util.portletTitleEdit(\r<br />
&nbsp;&nbsp;&nbsp; {\r<br />
&nbsp;&nbsp;&nbsp; obj: jQuery("#p_p_id_EXT_1_"),\r<br />
&nbsp;&nbsp;&nbsp; plid: "10102",\r<br />
&nbsp;&nbsp;&nbsp; doAsUserId: "",\r<br />
&nbsp;&nbsp;&nbsp; portletId: "EXT_1"\r<br />
&nbsp;&nbsp;&nbsp; }\r<br />
&nbsp;&nbsp;&nbsp; );\r<br />
&nbsp;&nbsp;&nbsp; }\r<br />
&nbsp;&nbsp;&nbsp; );\r<br />
&nbsp;&nbsp;&nbsp; &lt;/script&gt;\r</p>
<p>&nbsp;<br />
<strong>最小化一个portlet</strong></p>
<p><strong>请求：</strong><br />
Hypertext Transfer Protocol<br />
&nbsp;&nbsp;&nbsp; POST /c/portal/update_layout HTTP/1.1\r\n<br />
&nbsp;&nbsp;&nbsp; Referer: <a href="http://10.108.10.205:8080/web/guest/home/r/n">http://10.108.10.205:8080/web/guest/home\r\n</a><br />
&nbsp;&nbsp;&nbsp; method: POST /c/portal/update_layout HTTP/1.1\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Type: application/x-www-form-urlencoded\r\n<br />
&nbsp;&nbsp;&nbsp; Accept-Encoding: gzip, deflate\r\n<br />
&nbsp;&nbsp;&nbsp; User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Maxthon; .NET CLR 1.1.4322; .NET CLR 2.0.50727)\r\n<br />
&nbsp;&nbsp;&nbsp; Host: 10.108.10.205:8080\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Length: 68<br />
&nbsp;&nbsp;&nbsp; Connection: Keep-Alive\r\n<br />
&nbsp;&nbsp;&nbsp; Cache-Control: no-cache\r\n<br />
&nbsp;&nbsp;&nbsp; Cookie: COOKIE_SUPPORT=true; <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#76;&#79;&#71;&#73;&#78;&#61;&#116;&#101;&#115;&#116;&#64;&#108;&#105;&#102;&#101;&#114;&#97;&#121;&#46;&#99;&#111;&#109;">LOGIN=test@liferay.com</a>; SCREEN_NAME=DkOc2AWkcEQ=; GUEST_LANGUAGE_ID=en_US; JSESSIONID=2DFE59B64996E95DE0C64BA609CF79D1\r\n<br />
&nbsp;&nbsp;&nbsp; \r\n<br />
Line-based text data: application/x-www-form-urlencoded<br />
&nbsp;&nbsp;&nbsp; p_l_id=10102&amp;p_p_id=EXT_1&amp;p_p_restore=false&amp;doAsUserId=&amp;cmd=minimize</p>
<p><strong>响应：</strong><br />
Hypertext Transfer Protocol<br />
&nbsp;&nbsp;&nbsp; HTTP/1.1 200 OK\r\n<br />
&nbsp;&nbsp;&nbsp; Server: Apache-Coyote/1.1\r\n<br />
&nbsp;&nbsp;&nbsp; Set-Cookie: COOKIE_SUPPORT=true; Expires=Thu, 05-Mar-2009 07:57:17 GMT; Path=/\r\n<br />
&nbsp;&nbsp;&nbsp; Liferay-Portal: Liferay Enterprise Portal 4.3.3 (Owen / Build 4303 / October 9, 2007)\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Type: text/html;charset=UTF-8\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Length: 0<br />
&nbsp;&nbsp;&nbsp; Date: Wed, 05 Mar 2008 07:57:17 GMT\r\n<br />
&nbsp;&nbsp;&nbsp; \r\n</p>
<p>&nbsp;</p>
<p><strong>恢复一个portlet（从最小化）</strong></p>
<p><strong>请求：<br />
</strong>Hypertext Transfer Protocol<br />
&nbsp;&nbsp;&nbsp; POST /c/portal/update_layout HTTP/1.1\r\n<br />
&nbsp;&nbsp;&nbsp; Accept: */*\r\n<br />
&nbsp;&nbsp;&nbsp; Accept-Language: en-us\r\n<br />
&nbsp;&nbsp;&nbsp; Referer: <a href="http://10.108.10.205:8080/web/guest/home/r/n">http://10.108.10.205:8080/web/guest/home\r\n</a><br />
&nbsp;&nbsp;&nbsp; method: POST /c/portal/update_layout HTTP/1.1\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Type: application/x-www-form-urlencoded\r\n<br />
&nbsp;&nbsp;&nbsp; Accept-Encoding: gzip, deflate\r\n<br />
&nbsp;&nbsp;&nbsp; User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Maxthon; .NET CLR 1.1.4322; .NET CLR 2.0.50727)\r\n<br />
&nbsp;&nbsp;&nbsp; Host: 10.108.10.205:8080\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Length: 67<br />
&nbsp;&nbsp;&nbsp; Connection: Keep-Alive\r\n<br />
&nbsp;&nbsp;&nbsp; Cache-Control: no-cache\r\n<br />
&nbsp;&nbsp;&nbsp; Cookie: COOKIE_SUPPORT=true; <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#76;&#79;&#71;&#73;&#78;&#61;&#116;&#101;&#115;&#116;&#64;&#108;&#105;&#102;&#101;&#114;&#97;&#121;&#46;&#99;&#111;&#109;">LOGIN=test@liferay.com</a>; SCREEN_NAME=DkOc2AWkcEQ=; GUEST_LANGUAGE_ID=en_US; JSESSIONID=2DFE59B64996E95DE0C64BA609CF79D1\r\n<br />
&nbsp;&nbsp;&nbsp; \r\n<br />
Line-based text data: application/x-www-form-urlencoded<br />
&nbsp;&nbsp;&nbsp; p_l_id=10102&amp;p_p_id=EXT_1&amp;p_p_restore=true&amp;doAsUserId=&amp;cmd=minimize</p>
<p><strong>响应：</strong><br />
Hypertext Transfer Protocol<br />
&nbsp;&nbsp;&nbsp; HTTP/1.1 200 OK\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; Server: Apache-Coyote/1.1\r\n<br />
&nbsp;&nbsp;&nbsp; Set-Cookie: COOKIE_SUPPORT=true; Expires=Thu, 05-Mar-2009 07:57:17 GMT; Path=/\r\n<br />
&nbsp;&nbsp;&nbsp; Liferay-Portal: Liferay Enterprise Portal 4.3.3 (Owen / Build 4303 / October 9, 2007)\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Type: text/html;charset=UTF-8\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Length: 0<br />
&nbsp;&nbsp;&nbsp; Date: Wed, 05 Mar 2008 07:57:17 GMT\r\n<br />
&nbsp;&nbsp;&nbsp; \r\n</p>
<p><br />
<strong>最大化一个portlet</strong></p>
<p><strong>请求：</strong><br />
Hypertext Transfer Protocol<br />
&nbsp;&nbsp;&nbsp; GET /web/guest/home?p_p_id=EXT_1&amp;p_p_action=0&amp;p_p_state=maximized&amp; HTTP/1.1\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-</p>
<p>shockwave-flash, */*\r\n<br />
&nbsp;&nbsp;&nbsp; Referer: <a href="http://10.108.10.205:8080/web/guest/home/r/n">http://10.108.10.205:8080/web/guest/home\r\n</a><br />
&nbsp;&nbsp;&nbsp; Accept-Language: en-us\r\n<br />
&nbsp;&nbsp;&nbsp; Accept-Encoding: gzip, deflate\r\n<br />
&nbsp;&nbsp;&nbsp; User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Maxthon; .NET CLR 1.1.4322; .NET CLR 2.0.50727)\r\n<br />
&nbsp;&nbsp;&nbsp; Host: 10.108.10.205:8080\r\n<br />
&nbsp;&nbsp;&nbsp; Connection: Keep-Alive\r\n<br />
&nbsp;&nbsp;&nbsp; Cookie: LFR_SESSION_STATE_10111=1204702463265; COOKIE_SUPPORT=true; <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#76;&#79;&#71;&#73;&#78;&#61;&#116;&#101;&#115;&#116;&#64;&#108;&#105;&#102;&#101;&#114;&#97;&#121;&#46;&#99;&#111;&#109;">LOGIN=test@liferay.com</a>; SCREEN_NAME=DkOc2AWkcEQ=; GUEST_LANGUAGE_ID=en_US; </p>
<p>JSESSIONID=2DFE59B64996E95DE0C64BA609CF79D1\r\n<br />
&nbsp;&nbsp;&nbsp; \r\n</p>
<p><strong>响应：</strong><br />
Hypertext Transfer Protocol<br />
&nbsp;&nbsp;&nbsp; HTTP/1.1 200 OK\r\n<br />
&nbsp;&nbsp;&nbsp; Server: Apache-Coyote/1.1\r\n<br />
&nbsp;&nbsp;&nbsp; Set-Cookie: COOKIE_SUPPORT=true; Expires=Thu, 05-Mar-2009 07:39:37 GMT; Path=/\r\n<br />
&nbsp;&nbsp;&nbsp; Liferay-Portal: Liferay Enterprise Portal 4.3.3 (Owen / Build 4303 / October 9, 2007)\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Encoding: gzip\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Type: text/html;charset=UTF-8\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Length: 4473<br />
&nbsp;&nbsp;&nbsp; Date: Wed, 05 Mar 2008 07:39:47 GMT\r\n<br />
&nbsp;&nbsp;&nbsp; \r\n<br />
&nbsp;&nbsp;&nbsp; Content-encoded entity body (gzip): 4473 bytes -&gt; 19199 bytes<br />
Line-based text data: text/html<br />
&nbsp;&nbsp;&nbsp; &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd%22%3E/r">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;\r</a><br />
&nbsp;&nbsp;&nbsp; &lt;html dir="ltr"&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;head&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;title&gt;liferay.com - Welcome&lt;/title&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;meta content="text/html; charset=UTF-8" http-equiv="content-type" /&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;link rel="Shortcut Icon" href="/html/themes/genesis/images/liferay.ico" _fcksavedurl=""/html/themes/genesis/images/liferay.ico"" /&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;link href="/c/portal/css_cached?themeId=genesis&amp;colorSchemeId=01&amp;t=1204702034813" type="text/css" rel="stylesheet" /&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;style type="text/css"&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;/style&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;script type="text/javascript"&gt;\r<br />
&nbsp;&nbsp;&nbsp; var themeDisplay = {\r<br />
&nbsp;&nbsp;&nbsp; getCompanyId: function() {\r<br />
&nbsp;&nbsp;&nbsp; return "10094";\r<br />
&nbsp;&nbsp;&nbsp; },\r<br />
&nbsp;&nbsp;&nbsp; getDoAsUserIdEncoded: function() {\r<br />
&nbsp;&nbsp;&nbsp; return "";\r<br />
&nbsp;&nbsp;&nbsp; },\r<br />
&nbsp;&nbsp;&nbsp; ................................(省略了整个页面的代码)</p>
<p><br />
<strong>恢复一个portle(从全屏)</strong></p>
<p><strong>请求：</strong><br />
Hypertext Transfer Protocol<br />
&nbsp;&nbsp;&nbsp; GET /web/guest/home?p_p_id=EXT_1&amp;p_p_action=0&amp;p_p_state=normal&amp; HTTP/1.1\r\n<br />
&nbsp;&nbsp;&nbsp; Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-</p>
<p>shockwave-flash, */*\r\n<br />
&nbsp;&nbsp;&nbsp; Referer: <a href="http://10.108.10.205:8080/web/guest/home?p_p_id=EXT_1&amp;p_p_action=0&amp;p_p_state=maximized&amp;%5Cr%5Cn">http://10.108.10.205:8080/web/guest/home?p_p_id=EXT_1&amp;p_p_action=0&amp;p_p_state=maximized&amp;\r\n</a><br />
&nbsp;&nbsp;&nbsp; Accept-Language: en-us\r\n<br />
&nbsp;&nbsp;&nbsp; Accept-Encoding: gzip, deflate\r\n<br />
&nbsp;&nbsp;&nbsp; User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Maxthon; .NET CLR 1.1.4322; .NET CLR 2.0.50727)\r\n<br />
&nbsp;&nbsp;&nbsp; Host: 10.108.10.205:8080\r\n<br />
&nbsp;&nbsp;&nbsp; Connection: Keep-Alive\r\n<br />
&nbsp;&nbsp;&nbsp; Cookie: LFR_SESSION_STATE_10111=1204702790765; COOKIE_SUPPORT=true; <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#76;&#79;&#71;&#73;&#78;&#61;&#116;&#101;&#115;&#116;&#64;&#108;&#105;&#102;&#101;&#114;&#97;&#121;&#46;&#99;&#111;&#109;">LOGIN=test@liferay.com</a>; SCREEN_NAME=DkOc2AWkcEQ=; GUEST_LANGUAGE_ID=en_US; </p>
<p>JSESSIONID=2DFE59B64996E95DE0C64BA609CF79D1\r\n<br />
&nbsp;&nbsp;&nbsp; \r\n</p>
<p><strong>响应：</strong><br />
Hypertext Transfer Protocol<br />
&nbsp;&nbsp;&nbsp; HTTP/1.1 200 OK\r\n<br />
&nbsp;&nbsp;&nbsp; Server: Apache-Coyote/1.1\r\n<br />
&nbsp;&nbsp;&nbsp; Set-Cookie: COOKIE_SUPPORT=true; Expires=Thu, 05-Mar-2009 07:39:37 GMT; Path=/\r\n<br />
&nbsp;&nbsp;&nbsp; Liferay-Portal: Liferay Enterprise Portal 4.3.3 (Owen / Build 4303 / October 9, 2007)\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Encoding: gzip\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Type: text/html;charset=UTF-8\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Length: 4473<br />
&nbsp;&nbsp;&nbsp; Date: Wed, 05 Mar 2008 07:39:47 GMT\r\n<br />
&nbsp;&nbsp;&nbsp; \r\n<br />
&nbsp;&nbsp;&nbsp; Content-encoded entity body (gzip): 4473 bytes -&gt; 19199 bytes<br />
Line-based text data: text/html<br />
&nbsp;&nbsp;&nbsp; &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd%22%3E/r">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;\r</a><br />
&nbsp;&nbsp;&nbsp; &lt;html dir="ltr"&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;head&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;title&gt;liferay.com - Welcome&lt;/title&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;meta content="text/html; charset=UTF-8" http-equiv="content-type" /&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;link rel="Shortcut Icon" href="/html/themes/genesis/images/liferay.ico" _fcksavedurl=""/html/themes/genesis/images/liferay.ico"" /&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;link href="/c/portal/css_cached?themeId=genesis&amp;colorSchemeId=01&amp;t=1204702034813" type="text/css" rel="stylesheet" /&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;style type="text/css"&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;/style&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;script type="text/javascript"&gt;\r<br />
&nbsp;&nbsp;&nbsp; var themeDisplay = {\r<br />
&nbsp;&nbsp;&nbsp; getCompanyId: function() {\r<br />
&nbsp;&nbsp;&nbsp; return "10094";\r<br />
&nbsp;&nbsp;&nbsp; },\r<br />
&nbsp;&nbsp;&nbsp; getDoAsUserIdEncoded: function() {\r<br />
&nbsp;&nbsp;&nbsp; return "";\r<br />
&nbsp;&nbsp;&nbsp; },\r<br />
&nbsp;&nbsp;&nbsp; ................................(省略了整个页面的代码)</p>
<p><br />
<strong>拖动一个portlet</strong></p>
<p><strong>请求：</strong><br />
Hypertext Transfer Protocol<br />
&nbsp;&nbsp;&nbsp; POST /c/portal/update_layout HTTP/1.1\r\n<br />
&nbsp;&nbsp;&nbsp; Accept: */*\r\n<br />
&nbsp;&nbsp;&nbsp; Accept-Language: en-us\r\n<br />
&nbsp;&nbsp;&nbsp; Referer: <a href="http://10.108.10.205:8080/web/guest/home?p_p_id=EXT_1&amp;p_p_action=0&amp;p_p_state=normal&amp;%5Cr%5Cn">http://10.108.10.205:8080/web/guest/home?p_p_id=EXT_1&amp;p_p_action=0&amp;p_p_state=normal&amp;\r\n</a><br />
&nbsp;&nbsp;&nbsp; method: POST /c/portal/update_layout HTTP/1.1\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Type: application/x-www-form-urlencoded\r\n<br />
&nbsp;&nbsp;&nbsp; Accept-Encoding: gzip, deflate\r\n<br />
&nbsp;&nbsp;&nbsp; User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Maxthon; .NET CLR 1.1.4322; .NET CLR 2.0.50727)\r\n<br />
&nbsp;&nbsp;&nbsp; Host: 10.108.10.205:8080\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Length: 80<br />
&nbsp;&nbsp;&nbsp; Connection: Keep-Alive\r\n<br />
&nbsp;&nbsp;&nbsp; Cache-Control: no-cache\r\n<br />
&nbsp;&nbsp;&nbsp; Cookie: COOKIE_SUPPORT=true; <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#76;&#79;&#71;&#73;&#78;&#61;&#116;&#101;&#115;&#116;&#64;&#108;&#105;&#102;&#101;&#114;&#97;&#121;&#46;&#99;&#111;&#109;">LOGIN=test@liferay.com</a>; SCREEN_NAME=DkOc2AWkcEQ=; GUEST_LANGUAGE_ID=en_US; JSESSIONID=2DFE59B64996E95DE0C64BA609CF79D1\r\n<br />
&nbsp;&nbsp;&nbsp; \r\n<br />
Line-based text data: application/x-www-form-urlencoded<br />
&nbsp;&nbsp;&nbsp; p_l_id=10102&amp;p_p_id=EXT_1&amp;p_p_col_id=column-2&amp;p_p_col_pos=0&amp;doAsUserId=&amp;cmd=move</p>
<p><strong>响应：<br />
</strong>Hypertext Transfer Protocol<br />
&nbsp;&nbsp;&nbsp; HTTP/1.1 200 OK\r\n<br />
&nbsp;&nbsp;&nbsp; Server: Apache-Coyote/1.1\r\n<br />
&nbsp;&nbsp;&nbsp; Set-Cookie: COOKIE_SUPPORT=true; Expires=Thu, 05-Mar-2009 07:49:39 GMT; Path=/\r\n<br />
&nbsp;&nbsp;&nbsp; Liferay-Portal: Liferay Enterprise Portal 4.3.3 (Owen / Build 4303 / October 9, 2007)\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Type: text/html;charset=UTF-8\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Length: 0<br />
&nbsp;&nbsp;&nbsp; Date: Wed, 05 Mar 2008 07:49:39 GMT\r\n<br />
&nbsp;&nbsp;&nbsp; \r\n</p>
<p><br />
<strong>删除一个portlet</strong></p>
<p><strong>请求：<br />
</strong>Hypertext Transfer Protocol<br />
&nbsp;&nbsp;&nbsp; POST /c/portal/update_layout HTTP/1.1\r\n<br />
&nbsp;&nbsp;&nbsp; Accept: */*\r\n<br />
&nbsp;&nbsp;&nbsp; Accept-Language: en-us\r\n<br />
&nbsp;&nbsp;&nbsp; Referer: <a href="http://10.108.10.205:8080/web/guest/home?p_p_id=EXT_1&amp;p_p_action=0&amp;p_p_state=normal&amp;%5Cr%5Cn">http://10.108.10.205:8080/web/guest/home?p_p_id=EXT_1&amp;p_p_action=0&amp;p_p_state=normal&amp;\r\n</a><br />
&nbsp;&nbsp;&nbsp; method: POST /c/portal/update_layout HTTP/1.1\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Type: application/x-www-form-urlencoded\r\n<br />
&nbsp;&nbsp;&nbsp; Accept-Encoding: gzip, deflate\r\n<br />
&nbsp;&nbsp;&nbsp; User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Maxthon; .NET CLR 1.1.4322; .NET CLR 2.0.50727)\r\n<br />
&nbsp;&nbsp;&nbsp; Host: 10.108.10.205:8080\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Length: 48<br />
&nbsp;&nbsp;&nbsp; Connection: Keep-Alive\r\n<br />
&nbsp;&nbsp;&nbsp; Cache-Control: no-cache\r\n<br />
&nbsp;&nbsp;&nbsp; Cookie: COOKIE_SUPPORT=true; <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#76;&#79;&#71;&#73;&#78;&#61;&#116;&#101;&#115;&#116;&#64;&#108;&#105;&#102;&#101;&#114;&#97;&#121;&#46;&#99;&#111;&#109;">LOGIN=test@liferay.com</a>; SCREEN_NAME=DkOc2AWkcEQ=; GUEST_LANGUAGE_ID=en_US; JSESSIONID=2DFE59B64996E95DE0C64BA609CF79D1\r\n<br />
&nbsp;&nbsp;&nbsp; \r\n<br />
Line-based text data: application/x-www-form-urlencoded<br />
&nbsp;&nbsp;&nbsp; p_l_id=10102&amp;p_p_id=EXT_1&amp;doAsUserId=&amp;cmd=delete</p>
<p><strong>响应：<br />
</strong>Hypertext Transfer Protocol<br />
&nbsp;&nbsp;&nbsp; HTTP/1.1 200 OK\r\n<br />
&nbsp;&nbsp;&nbsp; Server: Apache-Coyote/1.1\r\n<br />
&nbsp;&nbsp;&nbsp; Set-Cookie: COOKIE_SUPPORT=true; Expires=Thu, 05-Mar-2009 07:52:25 GMT; Path=/\r\n<br />
&nbsp;&nbsp;&nbsp; Liferay-Portal: Liferay Enterprise Portal 4.3.3 (Owen / Build 4303 / October 9, 2007)\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Type: text/html;charset=UTF-8\r\n<br />
&nbsp;&nbsp;&nbsp; Content-Length: 0<br />
&nbsp;&nbsp;&nbsp; Date: Wed, 05 Mar 2008 07:52:25 GMT\r\n<br />
&nbsp;&nbsp;&nbsp; \r\n <br />
</p>
&nbsp;<br />
<br />
<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2177424</p>
<img src ="http://www.blogjava.net/libin2722/aggbug/186281.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-03-14 14:14 <a href="http://www.blogjava.net/libin2722/archive/2008/03/14/186281.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 深入浅出Liferay Portal (7) </title><link>http://www.blogjava.net/libin2722/archive/2008/03/14/186278.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Fri, 14 Mar 2008 06:13:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/03/14/186278.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/186278.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/03/14/186278.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/186278.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/186278.html</trackback:ping><description><![CDATA[&nbsp;
<p>如何在portal中增加一个portlet (非content_portlet)。</p>
<p>通过分析知道，在Add Content中点击某个portlet的add按钮后，服务器会收到一个/c/portal/update_layout...的请求（这里与生成 Add Content Portlet有区别，在前面文章中提到，那时的请求是一个/c/portal/render_portlet...），服务器在收到请求后前面的步骤同上面分析add content portlet的过程一样。</p>
<p><strong>PortalRequestProcess.process()</strong></p>
<p>String path = processPath(request, response);<br />
<font color="#99cc00">//这里path = &#8220;/portal/update_layout&#8221;.</font></p>
<p>ActionMapping mapping = processMapping(request, response, path);<br />
<font color="#99cc00">//这里找到在struts-config.xml中定义的关于上面path的mapping.</font></p>
<p>Action action = processActionCreate(request, response, mapping);<br />
<font color="#99cc00">//这里生成了UpdateLayoutAction.</font></p>
<p>ActionForward forward = processActionPerform(request, response, action, form, mapping);</p>
<p>processForwardConfig(request, response, forward);</p>
<p>在struts-config.xml中有定义：<br />
&lt;action path="/portal/update_layout" type="com.liferay.portal.action.UpdateLayoutAction" /&gt;</p>
<p><strong>UpdateLayoutAction.execute()</strong></p>
<p>LayoutTypePortlet layoutTypePortlet = themeDisplay.getLayoutTypePortlet();</p>
<p>String cmd = ParamUtil.getString(req, Constants.CMD);</p>
<p>String portletId = ParamUtil.getString(req, "p_p_id");</p>
<p>if (cmd.equals(Constants.ADD)) <br />
{&nbsp; portletId = layoutTypePortlet.addPortletId(userId, portletId); }<br />
else if (cmd.equals(Constants.DELETE)) { layoutTypePortlet.removePortletId(portletId); }<br />
else if (cmd.equals("drag")) { }<br />
else if (cmd.equals("minimize")) { }<br />
else if (cmd.equals("move")) {&nbsp;layoutTypePortlet.movePortletId(userId, portletId, columnId, columnPos); }<br />
else if (cmd.equals("template")) { }</p>
<p>if (ParamUtil.getBoolen(req, "refresh")) {}<br />
else {<br />
&nbsp;&nbsp;if (cmd.equals(Constants.ADD) &amp;&amp; (portletId != null)) {<br />
&nbsp;&nbsp;Action renderPortletAction = (Action)InstancePool.get(RenderPortletAction.class.getName());<br />
&nbsp;&nbsp;renderPortletAction.execute(mapping, form, dynamicReq, res);<br />
}</p>
<p>因为cmd=add，所以调用LayoutTypePortlet.addPortletId()来将portletId加入到Layout中，而且最后调用RenderPortletAction.execute()来将这个portlet最终render出来，具体过程如上面关于content portlet的分析。 <br />
</p>
&nbsp;<br />
<br />
<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2177387</p>
<img src ="http://www.blogjava.net/libin2722/aggbug/186278.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-03-14 14:13 <a href="http://www.blogjava.net/libin2722/archive/2008/03/14/186278.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入浅出Liferay Portal (8) </title><link>http://www.blogjava.net/libin2722/archive/2008/03/14/186279.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Fri, 14 Mar 2008 06:13:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/03/14/186279.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/186279.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/03/14/186279.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/186279.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/186279.html</trackback:ping><description><![CDATA[&nbsp;
<p><strong>tiles-def.xml</strong><br />
------------------<br />
&lt;definition name="portal" path="/common/themes/<strong><font color="#ff0000">portal.jsp</font></strong>"&gt;<br />
&nbsp; &lt;put name="title" value="" /&gt;<br />
&nbsp; &lt;put name="selectable" value="false" /&gt;<br />
&lt;/definition&gt;</p>
<p><strong>portal.jsp</strong><br />
--------------<br />
&lt;c:choose&gt;<br />
&nbsp;&lt;c:when test="&lt;%= themeDisplay.isStateExclusive() %&gt;"&gt;<br />
&nbsp;&nbsp;&lt;%= request.getAttribute(WebKeys.LAYOUT_CONTENT) %&gt;<br />
&nbsp;&lt;/c:when&gt;<br />
&nbsp;&lt;c:when test="&lt;%= themeDisplay.isStatePopUp() %&gt;"&gt;<br />
&nbsp;&nbsp;&lt;liferay-theme:include page="portal_pop_up.jsp" /&gt;<br />
&nbsp;&lt;/c:when&gt;<br />
&nbsp;&lt;c:otherwise&gt;<br />
&nbsp;&nbsp;&lt;liferay-theme:include page="<strong><font color="#ff0000">portal_normal.jsp</font></strong>" /&gt;<br />
&nbsp;&lt;/c:otherwise&gt;<br />
&lt;/c:choose&gt;</p>
<p><strong>portal_normal.vm</strong><br />
--------------------------<br />
&lt;html dir="#language ("lang.dir")"&gt;</p>
<p>$theme.include(<font color="#ff0000"><strong>$top_head_include</strong></font>)</p>
<p>#css ($css_main_file)<br />
#js ($js_main_file)<br />
$theme.include($bottom_ext_include)<br />
$theme.include($session_timeout_include)<br />
$theme.include($sound_alerts_include)</p>
<p><br />
<strong>init.vm</strong><br />
---------<br />
#set ($bottom_ext_include = "$dir_include/common/themes/bottom.jsp")<br />
#set ($content_include = "$dir_include$tilesContent")<br />
#set ($session_timeout_include = "$dir_include/common/themes/session_timeout.jsp")<br />
#set ($sound_alerts_include = "$dir_include/common/themes/sound_alerts.jsp")<br />
#set ($top_head_include = "$dir_include/common/themes/<strong><font color="#ff0000">top_head.jsp</font></strong>")<br />
#set ($top_messages_include = "$dir_include/common/themes/top_messages.jsp")</p>
<p><strong>top_head.jsp</strong><br />
------------------<br />
&lt;%@ include file="/html/common/themes/<strong><font color="#ff0000">top_js.jspf</font></strong>" %&gt;<br />
&lt;%@ include file="/html/common/themes/top_js-ext.jsp" %&gt;</p>
<p><br />
<strong>top_js.jspf<br />
</strong>------------<br />
&lt;%<br />
String[] javaScriptFiles = PropsUtil.getArray(PropsUtil.JAVASCRIPT_FILES);<br />
for (int i = 0; i &lt; javaScriptFiles.length; i++) {<br />
%&gt;<br />
&nbsp; <strong><font color="#ff0000">&lt;script src="&lt;%= themeDisplay.getPathJavaScript() %&gt;/&lt;%= javaScriptFiles[i] %&gt;"&nbsp;&nbsp;type="text/javascript"&gt;&lt;/script&gt;</font></strong><br />
&lt;%<br />
}<br />
%&gt;</p>
<p><br />
<strong>portal.properties</strong><br />
-------------------<br />
##<br />
## JavaScript<br />
##</p>
<p>&nbsp;&nbsp;&nbsp; #<br />
&nbsp;&nbsp;&nbsp; # Set a list of JavaScript files that will be loaded programmatically in<br />
&nbsp;&nbsp;&nbsp; # /html/common/themes/top_js.jsp.<br />
&nbsp;&nbsp;&nbsp; #<br />
&nbsp;&nbsp;&nbsp; # The ordering of the JavaScript files is important. Specifically, all<br />
&nbsp;&nbsp;&nbsp; # JQuery scripts should go first.<br />
&nbsp;&nbsp;&nbsp; #<br />
&nbsp;&nbsp;&nbsp; # The Liferay scripts are grouped in such a way, that the first grouping<br />
&nbsp;&nbsp;&nbsp; # denotes utility scripts that are used by the second and third groups. The<br />
&nbsp;&nbsp;&nbsp; # second grouping denotes utility classes that rely on the first group, but<br />
&nbsp;&nbsp;&nbsp; # does not rely on the second or third group. The third grouping denotes<br />
&nbsp;&nbsp;&nbsp; # modules that rely on the first and second group.<br />
&nbsp;&nbsp;&nbsp; #<br />
&nbsp;&nbsp;&nbsp; javascript.files=\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # JQuery scripts<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jquery/jquery.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jquery/cookie.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jquery/dimensions.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jquery/hover_intent.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jquery/interface.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jquery/interface.patch.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jquery/j2browse.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jquery/jeditable.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jquery/json.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jquery/media.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jquery/tabs.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Miscellaneous scripts<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; misc/class.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; misc/swfobject.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Liferay base utility scripts<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/liferay.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/browser.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/util.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/language.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/layout.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Liferay utility scripts<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/ajax.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/animate.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/coordinates.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/ldrag.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #liferay/leditable.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/lresize.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/popup.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/portal.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/portlet.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/publisher.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Liferay modules<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/auto_fields.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/color_picker.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/columns.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/dock.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/dynamic_select.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/freeform.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/layout_configuration.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/messaging.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/notice.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/navigation.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/session.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/tags_selector.js <br />
</p>
&nbsp;<br />
<br />
<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2177411</p>
<img src ="http://www.blogjava.net/libin2722/aggbug/186279.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-03-14 14:13 <a href="http://www.blogjava.net/libin2722/archive/2008/03/14/186279.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入浅出Liferay Portal (5) </title><link>http://www.blogjava.net/libin2722/archive/2008/03/14/186275.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Fri, 14 Mar 2008 06:12:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/03/14/186275.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/186275.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/03/14/186275.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/186275.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/186275.html</trackback:ping><description><![CDATA[&nbsp;
<p>先前的文章提到/c/*的请求都是交给MainServlet处理的，现在分析对于不同的/c/*，例如/c/layout或者/c/update_layout等请求是怎么传递到不同的action去的呢。</p>
<p>下面以显示 Add Content 为例进行分析，Add Content 窗口其实是一个在 portlet-custom.xml 中定义的名为87的portlet。点击Add Content链接会产生一个Reqest，开始整个处理的流程。</p>
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/lybra/add-content.JPG" /></p>
<p><strong>1. Request的生成。</strong></p>
<p>当时页面的源文件中有关的代码为：<br />
&lt;li class="add-content"&gt;<br />
&lt;a href="javascript: void(0);" onclick="LayoutConfiguration.toggle('10102', '87', '');"&gt;Add Content&lt;/a&gt;<br />
&lt;/li&gt;</p>
<p>点击add content调用的是LayoutConfiguration.toogle()。</p>
<p><strong>layout_configuratioin.js<br />
</strong>var LayoutConfiguration = {<br />
&nbsp; toggle : function (plid, ppid, doAsUserId) {<br />
&nbsp; var url = themeDisplay.getPathMain() + "/portal/render_portlet?p_l_id=" + plid + "&amp;p_p_id=" +ppid + "&amp;doAsUserId=" + doAsUserId + "&amp;p_p_state=exclusive";<br />
&nbsp; AjaxUtil.update(url, popup, {onComplete: function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LayoutConfiguration.init();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Liferay.Util.addInputType();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Liferay.Util.addInputFocus();}<br />
&nbsp;&nbsp;});};<br />
<font color="#99cc00">&nbsp; /*总之是会生成一个Ajax请求发送到服务器，过程以后可以分析 */</font></p>
<p>用Wireshark捕捉到的Request数据如下，知道请求中含有/c/portal/render_portlet字段，那自然会送入 MainServlet处理了。</p>
<p><img style="width: 489px; height: 181px" height="206" alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/lybra/request-data.JPG" width="575" /></p>
<p><strong>2. MainServlet.service()</strong></p>
<p><font color="#99cc00">/* 这里是Request首先到达的地方*/</font></p>
<p>ServletContext ctx = getServletContext();<br />
req.setAttribute(WebKeys.CTX, ctx);<br />
PortletRequestProcessor portletReqProcessor = PortletRequestProcessor.getInstance(this, moduleConfig);<br />
ctx.setAttribute(WebKeys.PORTLET_STRUTS_PROCESSOR, portletReqProcessor);<br />
callParentService(req, res); <br />
<font color="#99cc00">/* 调用ActionServlet.service()，由于在ActionServlet中没有覆盖service方法，所以 MainServlet 的super.service() 追溯到HttpServlet 的service方法 */</font></p>
<p><strong><font color="#000000">3. HttpServlet.service()</font></strong></p>
<p>if (method.equals(METHOD_GET)) { ,,,<br />
} else if (method.equals(METHOD_POST)) {<br />
&nbsp; doPost(req, resp);<br />
} else if (method.equals(METHOD_PUT)) {<br />
&nbsp; doPut(req, resp);&nbsp; <br />
} else if (method.equals(METHOD_DELETE)) {<br />
&nbsp; doDelete(req, resp);<br />
} else if (method.equals(METHOD_OPTIONS)) {<br />
&nbsp; doOptions(req,resp);<br />
} else if (method.equals(METHOD_TRACE)) {<br />
&nbsp; doTrace(req,resp);<br />
}</p>
<p><font color="#99cc00">/* 在 service 中，根据http的类型，分别调用 doPost, doGet, doPut, ...，由于ActionServlet中实现了doPost等方法，所以MainServlet.service()方法会传递到 ActionServlet中的doPost等方法。*/</font></p>
<p><strong>4. ActionServlet.doPost()</strong></p>
<p>process(request, response);</p>
<p><font color="#99cc00">/* 在另外ActionServlet的不同方法中，例如doGet()，doPut()，都调用了process()方法。*/</font></p>
<p><br />
<strong>5. ActionServlet.process()</strong></p>
<p>ModuleConfig config = getModuleConfig(request);<br />
RequestProcessor processor = getProcessorForModule(config);<br />
if (processor == null) {<br />
&nbsp; processor = getRequestProcessor(config);<br />
}<br />
processor.process(request, response);</p>
<p><font color="#99cc00">/* 最终传递到对应的Request Processor 的process()方法中去，也就是PortalRequestProcessor.process() */</font></p>
<p><br />
<strong>6. PortalRequestProcessor.process()</strong></p>
<p>public void process(HttpServletRequest req, HttpServletResponse res)<br />
&nbsp;&nbsp;throws IOException, ServletException {<br />
&nbsp; String path = super.processPath(req, res); <font color="#99cc00">//path = &#8220;/portal/render_portlet&#8221;</font><br />
&nbsp; ActionMapping mapping = (ActionMapping)moduleConfig.findActionconfig(path);<br />
&nbsp;&nbsp;super.process(req, res);<br />
&nbsp; <font color="#99cc00">/*由于TilesRequestProcessor中没有定义process()方法，所以调用 RequestProcessor.process() */<br />
</font>}</p>
<p><br />
<strong>7. RequestProcessor.process()</strong></p>
<p>public void process(HttpServletRequest request, HttpServletResponse response)<br />
&nbsp; throws IOException, ServletException {<br />
<br />
&nbsp; String path = processPath(request, response);<br />
<font color="#99cc00">&nbsp; //这里path = &#8220;/portal/render_portlet&#8221;.</font></p>
<p>&nbsp; ActionMapping mapping = processMapping(request, response, path);<br />
<font color="#99cc00">&nbsp; //这里找到在struts-config.xml中定义的关于上面path的mapping.</font></p>
<p>&nbsp; Action action = processActionCreate(request, response, mapping);<br />
&nbsp; <font color="#99cc00">//这里生成了RenderPortletAction.</font></p>
<p>&nbsp; ActionForward forward = processActionPerform(request, response, action, form, mapping);</p>
<p>&nbsp;&nbsp;processForwardConfig(request, response, forward);<br />
}</p>
<p>至此，每个由 MainServlet 传递来的 Request 都能到达对应的 Action，例如 LayoutAction，RenderPortletAction，UpdateLayoutAction，由这些 Action 最终完成 Layout 和 Portlet 的呈现。这里对应的action是RenderPortletAction（由下面的struts-config.xml中定义）。</p>
<p>下面以RenderPortletAction为例说明进一步的action过程。在struts-config.xml这个文件中定义了action class, forward path。</p>
<p>&lt;action path="/portal/layout" type="com.liferay.portal.action.LayoutAction"&gt;<br />
&nbsp; &lt;forward name="portal.layout" path="portal.layout" /&gt;<br />
&lt;/action&gt;</p>
<p>&lt;action path="/portal/update_layout" type="com.liferay.portal.action.UpdateLayoutAction" /&gt;</p>
<p>&lt;action path=&#8220;/portal/render_portlet&#8221; type=&#8220;com.liferay.portal.action.RenderPortletAction&#8221;&gt;<br />
&nbsp; &lt;forward name=&#8220;/portal/render_portlet&#8221; path=&#8220;/portal/render_portlet.jsp&#8221;/&gt;<br />
&lt;/action&gt;<br />
<font color="#99cc00">&lt;!-- 这里定义了由RenderPortletAction来处理&#8221;/portal/render_portlet&#8221;，而且最后要forward到&#8221; /portal/render_portlet.jsp&#8221;。所以最后会把render_portlet.jsp包含到response的页面当中-- &gt;</font></p>
<p>那render_portlet.jsp又是如何实现最终把add content这个portlet显示出来的呢，下回接着分析。</p>
<br />
&nbsp;<br />
<br />
<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2177383</p>
<img src ="http://www.blogjava.net/libin2722/aggbug/186275.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-03-14 14:12 <a href="http://www.blogjava.net/libin2722/archive/2008/03/14/186275.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入浅出Liferay Portal (6)  </title><link>http://www.blogjava.net/libin2722/archive/2008/03/14/186277.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Fri, 14 Mar 2008 06:12:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/03/14/186277.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/186277.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/03/14/186277.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/186277.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/186277.html</trackback:ping><description><![CDATA[&nbsp;
<p>上回说到/c/portal/render_portlet请求经过MVC过程后会到达render_portlet.jsp。</p>
<p><strong>render_portlet.jsp<br />
-------------------------</strong></p>
<p>Portlet portlet = (Portlet)request.getAttribute(WebKeys.RENDER_PORTLET);<br />
cachePortlet = PortletInstanceFactory.create(portlet, application);<br />
cachePortlet.render(renderRequestImpl, renderResponseImpl);</p>
<p><strong>CachePortlet.render()</strong></p>
<p>_invoke(req, res, false);<br />
CachePortlet._invoke()<br />
if (action)<br />
&nbsp; _portlet.processAction(...)<br />
else<br />
&nbsp; _portlet.render(...); </p>
<p><font color="#99cc00">// 因为87 portlet是一个StrutsPortlet，在这里会调用StrutsPortlet.render()方法，由于StrutsPortlet和 LiferayPortlet中都没有定义render()方法，最终调用的是GenericPortlet.render()方法。</font></p>
<p><br />
<strong>GenericPortlet.render()</strong></p>
<p>response.setTitle(getTitle(request));<br />
doDispatch(request, response);</p>
<p><font color="#99cc00">//由于LiferayPortlet中覆盖了doDispatch()方法，所以调用的是LiferayPortlet.doDispatch()</font></p>
<p><strong>LiferayPortlet.doDispatch()</strong></p>
<p>&nbsp; if (mode.equals(PortletMode.VIEW)) {<br />
&nbsp;&nbsp;&nbsp; doView(req, res);<br />
&nbsp; }<br />
&nbsp; else if (mode.equals(LiferayPortletMode.ABOUT)) {<br />
&nbsp;&nbsp;&nbsp; doAbout(req, res);<br />
&nbsp; }<br />
&nbsp; else if (mode.equals(LiferayPortletMode.CONFIG)) {<br />
&nbsp;&nbsp;&nbsp; doConfig(req, res);<br />
&nbsp; }<br />
&nbsp; .......</p>
<p><font color="#99cc00">//由于StrutsPortlet中重载了doView, doAbout等方法，所以调用的是StrutsPortlet中的各种doXXX()方法，下面以doView()为例<br />
// 另外有可能会有别的类型的portlet，例如liferay的JSPPortlet，从而会调用JSPPortlet.doXXX()方法。在 JSPPortlet.doView中，调用include(viewJSP, req, res);而viewJSP = getInitParameter("view-jsp");所以在这个地方就可以把该JSPPortlet定义好的view.jsp直接include 进来，没有如同StrutsPortlet的后续工作。</font></p>
<p><strong>StrutsPortlet.doView()</strong></p>
<p>include(req, res);</p>
<p><font color="#99cc00">//StrutsPortlet中其他的doXXX()方法都会最后调用include()方法。</font></p>
<p><strong>StrutsPortlet.include()</strong></p>
<p>PortletRequestProcessor processor = _getPortletRequestProcessor(req);<br />
processor.process(req, res);<br />
PortletRequestProcessor.process(RenderRequest req, RenderResponse res)<br />
<font color="#99cc00">//这里PortletRequestProcessor有两个process方法，一个处理RenderRequest，另一个处理ActionRequest。</font></p>
<p>HttpServletRequest httpReq = PortalUtil.getHttpServletRequest(req);<br />
HttpServletResponse httpRes = PortalUtil.getHttpServletResponse(res);</p>
<p>process(httpReq, httpRes);<br />
<font color="#99cc00">// 由于PortletRequestProcessor和TilesRequestProcessor中都没有重载process (HttpServletReq, HttpServletRes)，调用的是RequestProcessor的process()方法。</font></p>
<p><strong>RequestProcessor.process(HttpServletRequest, HttpServletResponse)</strong></p>
<p><br />
String path = processPath(request, response); <font color="#99cc00">//这里是/layout_configuration/view</font><br />
ActionMapping mapping = processMapping(request, response, path);<br />
processForward(request, response, mapping)<br />
processInclude(request, response, mapping)<br />
ActionForward forward = processActionPerform(request, response, action, form, mapping);<br />
&#8230;&#8230;</p>
<p><br />
protected void doInclude( String uri, HttpServletRequest request, HttpServletResponse response)<br />
{<br />
&nbsp; RequestDispatcher rd = getServletContext().getRequestDispatcher(uri);<br />
&nbsp; rd.include(request, response);<br />
}</p>
<p>portlet-custom.xml中定义了：<br />
&lt;portlet&gt;<br />
&nbsp; &lt;portlet-name&gt;87&lt;/portlet-name&gt;<br />
&nbsp; &lt;display-name&gt;Layout Configuration&lt;/display-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;portlet-class&gt;com.liferay.portlet.StrutsPortlet&lt;/portlet-class&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;view-action&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;/layout_configuration/view&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp; .....<br />
&lt;/portlet&gt;</p>
<p>struts-config.xml中定义了action：</p>
<p>&lt;action path="/layout_configuration/view" forward="portlet.layout_configuration.view" /&gt;</p>
<p>tiles-def.xml中定义了view.jsp：</p>
<p>&lt;definition name="portlet.layout_configuration.view" extends="portlet.layout_configuration"&gt;&nbsp; <br />
&nbsp; &lt;put name="portlet_content" value="/portlet/layout_configuration/view.jsp" /&gt;<br />
&lt;/definition&gt;</p>
<p>最后完成了万里长征，到达了/layout_configuration/view.jsp。</p>
<p><strong>/layouot_configuration/view.jsp<br />
</strong>-------------------------------------------</p>
<p>&nbsp;&nbsp;&nbsp; &lt;%<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PortletCategory portletCategory = (PortletCategory)WebAppPool.get(String.valueOf(company.getCompanyId()), WebKeys.PORTLET_CATEGORY);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List categories = ListUtil.fromCollection(portletCategory.getCategories());</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Collections.sort(categories, new PortletCategoryComparator(company.getCompanyId(), locale));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator itr = categories.iterator();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (itr.hasNext()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.setAttribute(WebKeys.PORTLET_CATEGORY, itr.next());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;liferay-util:include page="/html/portlet/layout_configuration/<font color="#ff0000"><strong>view_category.jsp</strong></font>" /&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;%<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%&gt;</p>
<p><strong>/layouot_configuration/view_category.jsp<br />
</strong>-----------------------------------------------------------</p>
<p>&lt;%<br />
itr2 = portlets.iterator();</p>
<p>while (itr2.hasNext()) {<br />
&nbsp; Portlet portlet = (Portlet)itr2.next();<br />
&nbsp; divId = new StringMaker();<br />
&nbsp; divId.append(newCategoryPath);<br />
&nbsp; divId.append(":");<br />
&nbsp; matcher = pattern.matcher(PortalUtil.getPortletTitle(portlet, application, locale));<br />
&nbsp; while (matcher.find()) {<br />
&nbsp;&nbsp;&nbsp; divId.append(matcher.group());<br />
&nbsp; }<br />
%&gt;</p>
<p>&lt;div class="layout_configuration_portlet" id="&lt;%= divId %&gt;"&gt;<br />
&nbsp; &lt;table border="0" cellpadding="2" cellspacing="0" width="100%"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width="99%"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;%= PortalUtil.getPortletTitle(portlet, application, locale) %&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td align="right"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;<font color="#ff0000"><strong>input type="button" value="&lt;liferay-ui:message key="add" /&gt;" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onClick="addPortlet('&lt;%= plid%&gt;', '&lt;%= portlet.getPortletId() %&gt;', '&lt;%= themeDisplay.getDoAsUserId() %&gt;');<br />
</strong></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;if (&lt;%= !portlet.isInstanceable() %&gt;) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var div = document.getElementById('&lt;%= divId %&gt;');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; div.parentNode.removeChild(div);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };"<br />
&nbsp;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />
&nbsp; &lt;/table&gt;<br />
&lt;/div&gt;<br />
&lt;%<br />
}<br />
%&gt;</p>
<p>在view_category.jsp 中列出了每个category中所包含的portlet列表，一旦点击了"add"按钮，会调用addPortlet()方法在页面上增加一个 portlet。在view_category.jsp中还实现了输入关键字对portlet进行过滤的功能。</p>
&nbsp;<br />
<br />
<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2177386</p>
<img src ="http://www.blogjava.net/libin2722/aggbug/186277.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-03-14 14:12 <a href="http://www.blogjava.net/libin2722/archive/2008/03/14/186277.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入浅出Liferay Portal (3)  </title><link>http://www.blogjava.net/libin2722/archive/2008/03/14/186273.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Fri, 14 Mar 2008 06:11:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/03/14/186273.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/186273.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/03/14/186273.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/186273.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/186273.html</trackback:ping><description><![CDATA[&nbsp;
<p>用户在地址栏键入<a href="http://localhost:8080/">http://localhost:8080/</a>后，整个Liferay系统发生了些什么呢？</p>
<p><strong>1. 第一步，生成 </strong><a href="http://localhost:8080/c"><strong>http://localhost:8080/c</strong></a><br />
Request:&nbsp;&nbsp; GET/HTTP/1.1<br />
Response:&nbsp; <br />
状态：HTTP/1.1 200 OK<br />
内容：... &lt;body onload="javascript:location.replace('/c')"&gt; ...</p>
<p><u>解释：</u><br />
在web.xml中有关于首页的定义如下，也就是说当用户敲入<a href="http://localhost:8080/">http://localhost:8080/</a>所调用的页面。</p>
<p>web.xml<br />
--------<br />
<font face="Courier New">&lt;welcome-file-list&gt;<br />
&nbsp; &lt;welcome-file&gt;index.html&lt;/welcome-file&gt;<br />
&nbsp; &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br />
&lt;/welcome-file-list&gt;</font></p>
<p>在index.jsp中有如下内容，所以可以知道Response的内容如何得来。</p>
<p>index.jsp<br />
----------<br />
<font face="Courier New">&lt;%@ page import="com.liferay.portal.util.PortalUtil" %&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&nbsp; &lt;title&gt;&lt;/title&gt;<br />
&nbsp; &lt;meta content="0; url=&lt;%= PortalUtil.getPathMain() %&gt;" http-equiv="refresh"&gt;<br />
&lt;/head&gt;<br />
&lt;body onload="javascript:location.replace('&lt;%= PortalUtil.getPathMain() %&gt;')"&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</font></p>
<p><br />
<strong>2. 第二步，生成 </strong><a href="http://localhost:8080/c/portal/layout"><strong>http://localhost:8080/c/portal/layout</strong></a></p>
<p>Request:&nbsp;&nbsp; GET/c HTTP/1.1<br />
Response:<br />
状态：HTTP/1.1 302 Moved Temporarily<br />
头部：Location: <a href="http://10.108.10.205:8080/c/portal/layout">http://10.108.10.205:8080/c/portal/layout</a></p>
<p><u>解释：<br />
</u>当服务器收到"GET/c"请求后，根据web.xml中的定义，请求会送入MainServlet进行处理。如何生成"/c/portal/layout"有待分析，以后补充，还好不影响大局。</p>
<p>web.xml<br />
--------<br />
<font face="Courier New">&lt;servlet-mapping&gt;<br />
&nbsp; &lt;servlet-name&gt;MainServlet&lt;/servlet-name&gt;<br />
&nbsp; &lt;url-pattern&gt;/c/*&lt;/url-pattern&gt;<br />
&lt;/servlet-mapping&gt;</font></p>
<p><br />
<strong>3. 第三步，生成 </strong><a href="http://10.108.10.205:8080/web/guest/home"><strong>http://10.108.10.205:8080/web/guest/home</strong></a><br />
Request:&nbsp;&nbsp; GET/c/portal/layout HTTP/1.1<br />
Response:<br />
状态：HTTP/1.1 302 Moved Temporarily<br />
头部：Location: <a href="http://10.108.10.205:8080/web/guest/home">http://10.108.10.205:8080/web/guest/home</a></p>
<p><u>解释：</u><br />
当服务器收到请求后，同样会送到MainServlet处理，然后会传递到LayoutAction, layout.jsp, portlet.jsp, TemplateProcessor, PortletColumnLogic, load_render_portlet.jsp, portlet_js.jspf，等等，很漫长的，也很有确的一个过程，后面会有单独的分析，中间仍有一些不明朗的地方，仍有待挖掘。不过不妨碍理清 Liferay的大致经络。</p>
<p><br />
<strong>4. 第四步，生成网页</strong><br />
Request:&nbsp;&nbsp; GET /web/guest/home HTTP/1.1 <br />
Response:&nbsp; <br />
状态：HTTP/1.1 200 OK<br />
内容：<br />
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd%22%3E%5Cn">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;\n</a><br />
&nbsp;&nbsp;&nbsp; &lt;html dir="ltr"&gt;\n<br />
&nbsp;&nbsp;&nbsp; &lt;head&gt;\n<br />
&nbsp;&nbsp;&nbsp; &lt;title&gt;liferay.com - Welcome&lt;/title&gt;\n<br />
&nbsp;&nbsp;&nbsp; &lt;meta content="text/html; charset=UTF-8" http-equiv="content-type" /&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;link rel="Shortcut Icon" href="/html/themes/classic/images/liferay.ico" _fcksavedurl=""/html/themes/classic/images/liferay.ico"" /&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;link href="/c/portal/css_cached?themeId=classic&amp;colorSchemeId=01&amp;t=1203549390654" type="text/css" </p>
<p>rel="stylesheet" /&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;style type="text/css"&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;/style&gt;\r<br />
&nbsp;&nbsp;&nbsp; &lt;script type="text/javascript"&gt;\r<br />
&nbsp;&nbsp;&nbsp; var themeDisplay = {\r<br />
&nbsp;&nbsp;&nbsp; getCompanyId: function() {\r<br />
&nbsp;&nbsp;&nbsp; return "10094";\r<br />
&nbsp;&nbsp;&nbsp; },\r<br />
......</p>
<p><u>解释：<br />
</u>在web.xml中有定义，所以"GET /web/guest/home"请求会由FriendlyURLServlet处理。</p>
<p>web.xml<br />
--------<br />
<font face="Courier New">&lt;servlet&gt;<br />
&nbsp; &lt;servlet-name&gt;FriendlyURLPublicServlet&lt;/servlet-name&gt;<br />
&nbsp; &lt;servlet-class&gt;com.liferay.portal.servlet.FriendlyURLServlet&lt;/servlet-class&gt;<br />
&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param-name&gt;private&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param-value&gt;false&lt;/param-value&gt;<br />
&nbsp; &lt;/init-param&gt;<br />
&nbsp; &lt;load-on-startup&gt;4&lt;/load-on-startup&gt;<br />
&lt;/servlet&gt;<br />
&lt;servlet-mapping&gt;<br />
&nbsp; &lt;servlet-name&gt;FriendlyURLPublicServlet&lt;/servlet-name&gt;<br />
&nbsp; &lt;url-pattern&gt;/web/*&lt;/url-pattern&gt;<br />
&lt;/servlet-mapping&gt;</font></p>
<p>在FriendlyURLServlet.service()方法中，再次将请求传递到/c/portal/layout，由LayoutAction进行后续处理。</p>
<p>FriendlyURLServlet.service()<br />
-----------------------------<br />
<font face="Courier New">ServletContext ctx = getServletContext();<br />
String mainPath = PortalUtil.PATH_MAIN;<br />
String redirect = mainPath; //redirect = "/c/portal/layout..."<br />
......<br />
RequestDispatcher rd = ctx.getRequestDispatcher(redirect);<br />
rd.forward(req, res);</font> <br />
</p>
&nbsp;<br />
<br />
<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2177392</p>
<img src ="http://www.blogjava.net/libin2722/aggbug/186273.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-03-14 14:11 <a href="http://www.blogjava.net/libin2722/archive/2008/03/14/186273.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入浅出Liferay Portal (4)  </title><link>http://www.blogjava.net/libin2722/archive/2008/03/14/186274.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Fri, 14 Mar 2008 06:11:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/03/14/186274.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/186274.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/03/14/186274.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/186274.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/186274.html</trackback:ping><description><![CDATA[&nbsp;
<p>上一篇讲到当用户在浏览器地址栏上输入<a href="http://localhost:8080/">http://localhost:8080/</a>后，经过几次迭代，服务器最终处理的是<a href="http://localhost:8080/c/portal/update">http://localhost:8080/c/portal/update</a>，那当服务器收到/c/portal/update的请求后做了什么动作，最后是怎么向浏览器发送网页信息呢？</p>
<p><strong>1. 首先MainServlet接收这个请求，然后传递到LayoutAction。（具体怎么传递后续会介绍到）<br />
</strong>在struts-config.xml中有定义，表明有关"/portal/layout"的请求是由LayoutAction来处理的。而在tiles-def.xml中定义"/portal/layout"最终传递到"/portal/layout.jsp"。</p>
<p><strong>struts-config.xml<br />
</strong>------------------------<br />
<font face="Courier New">&lt;action path="/portal/layout" type="com.liferay.portal.action.LayoutAction"&gt;<br />
&nbsp; &lt;forward name="portal.layout" path="portal.layout" /&gt;<br />
&lt;/action&gt;</font></p>
<p><strong>tiles-def.xml</strong><br />
------------------<br />
<font face="Courier New">&lt;definition name="portal.layout" extends="portal"&gt;<br />
&lt;put name="content" value="/portal/layout.jsp" /&gt;<br />
&nbsp;&lt;put name="selectable" value="true" /&gt;<br />
&lt;/definition&gt;</font></p>
<p><strong>2. 下面分析LayoutAction的简要流程</strong></p>
<p><strong>LayoutAction.execute()<br />
</strong>--------------------------------<br />
<font face="Courier New">ThemeDisplay themeDisplay = (ThemeDisplay)req.getAttribute(WebKeys.THEME_DISPLAY);<br />
Layout layout = themeDisplay.getLayout();</font></p>
<p><font face="Courier New"><font color="#99cc00">/* 加入/html/portal/layout/view/portlet.jsp 到网页*/</font><br />
<font color="#ff0000">incluldeLayoutContent</font>(req, res, themeDisplay, layout);</font></p>
<p><font face="Courier New">/<font color="#99cc00">* 加入/html/portal/layout.jsp 到网页，先portlet.jsp，后layout.jsp*/</font><br />
return mapping.findForward("portal.layout");</font></p>
<p><strong>LayoutAction.includeLayoutContent()</strong><br />
-----------------------------------------------------<br />
<font face="Courier New">String path = StrutsUtil.TEXT_HTML_DIR;<br />
</font><font face="Courier New" color="#99cc00">/* path = "/html" */</font></p>
<p><font face="Courier New">path += PortalUtil.getLayoutViewPage(layout);<br />
<font color="#99cc00">/* path = "/html/portal/layout/view/portlet.jsp" */</font></font></p>
<p><font face="Courier New">RequestDispatcher rd = ctx.getRequestDispatcher(path);<br />
rd.include(req, stringServletRes);</font></p>
<p>可见两个jsp文件是页面的关键所在。</p>
<p><strong>/portal/layout/view/portlet.jsp</strong><br />
-----------------------------------------<br />
<font face="Courier New">&lt;%<br />
String content = LayoutTemplateLocalUtil.getContent(layoutTypePortlet.getLayoutTemplateId(),<br />
&nbsp;&nbsp;&nbsp;false, theme.getThemeId());<br />
%&gt;<br />
&lt;%= RuntimePortletUtil.<font color="#ff0000">processTemplate</font>(application, request, response, pageContext, content) %&gt;</font></p>
<p><font color="#99cc00">/*****************************************************<br />
其中content的内容通过断点调试可以知道（是什么时候生成的呢？）<br />
&lt;div class="columns-2" id="content-wrapper"&gt;<br />
&nbsp; &lt;table id="layout-grid"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td class="lfr-column thirty" id="column-1" valign="top"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $processor.processColumn("column-1")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td class="lfr-column seventy" id="column-2" valign="top"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $processor.processColumn("column-2")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />
&nbsp; &lt;/table&gt;<br />
&lt;/div&gt;<br />
*****************************************************/<br />
/* RuntimePortletUtil.processTemplate()函数返回的是一个很长很长的字符串，就是最终用于显示页面上各个portlet的代码，下面有分析 */</font></p>
<p><strong>RuntimePortletUtil.processTemplate()</strong><br />
------------------------------------------------------<br />
<font face="Courier New">TemplateProcessor processor = new TemplateProcessor(ctx, req, res, portletId);<br />
VelocityContext vc = new VelocityContext();<br />
vc.put("processor", processor);<br />
// Velocity variables<br />
VelocityVariables.insertVariables(vc, req);<br />
vc.put("taglibLiferay", velocityTaglib);<br />
vc.put("theme", velocityTaglib);<br />
StringWriter sw = new StringWriter();<br />
Velocity.evaluate(vc, sw, RuntimePortletUtil.class.getName(), content);</font></p>
<p><font face="Courier New">String output = sw.toString();</font><br />
<font color="#99cc00"><font color="#99cc00">/*****************************************************<br />
</font>output的初始内容为：<br />
&lt;div class="columns-3" id="content-wrapper"&gt;<br />
&nbsp; &lt;table id="layout-grid"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td class="lfr-column thirty" id="column-1" valign="top"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [$TEMPLATE_COLUMN_column-1$]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td class="lfr-column thirty" id="column-2" valign="top"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [$TEMPLATE_COLUMN_column-2$]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td class="lfr-column thirty" id="column-3" valign="top"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [$TEMPLATE_COLUMN_column-3$]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />
&nbsp; &lt;/table&gt;<br />
&lt;/div&gt;<br />
</font><font color="#99cc00">*****************************************************/</font></p>
<p><font face="Courier New">Map columnsMap = processor.getColumnsMap();</font></p>
<p><font face="Courier New">while (itr.hasNext()) {<br />
&nbsp; Map.Entry entry = (Map.Entry)itr.next();<br />
&nbsp; String key = (String)entry.getKey();<br />
&nbsp; String value = (String)entry.getValue();<br />
&nbsp; output = StringUtil.replace(output, key, value);<br />
}</font></p>
<p><font color="#99cc00">/</font><font color="#99cc00">*****************************************************<br />
</font><font color="#99cc00">如果首页面上有四个portlet，名字为A，B，C，D，其中A在左边一列上，B，C同在中间一列，D在右边一列。则output的内容为：<br />
&lt;div class="columns-3" id="content-wrapper"&gt;<br />
&nbsp; &lt;table id="layout-grid"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td class="lfr-column thirty" id="column-1" valign="top"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div class="lfr-portlet-column" id="layout-column_column-1"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [$TEMPLATE_PORTLET_A$]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td class="lfr-column thirty" id="column-2" valign="top"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div class="lfr-portlet-column" id="layout-column_column-2"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [$TEMPLATE_PORTLET_B$]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [$TEMPLATE_PORTLET_C$]&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td class="lfr-column thirty" id="column-3" valign="top"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div class="lfr-portlet-column" id="layout-column_column-3"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [$TEMPLATE_PORTLET_D$]&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />
&nbsp; &lt;/table&gt;<br />
&lt;/div&gt;<br />
</font><font color="#99cc00">*****************************************************/</font></p>
<p><font face="Courier New">Map portletsMap = processor.getPortletsMap();<br />
itr = portletsMap.entrySet().iterator();<br />
while (itr.hasNext()) {<br />
&nbsp; StringMaker sm = new StringMaker();<br />
&nbsp; processPortlet(sm, ctx, req, res, portlet, queryString, columnId, columnPos,columnCount, null);<br />
&nbsp; output = StringUtil.replace(output, "[$TEMPLATE_PORTLET_" + portlet.getPortletId() + "$]", sm.toString());</font></p>
<p><font color="#99cc00">/<font color="#99cc00">*****************************************************<br />
</font>&nbsp; 这里每迭代一个portlet，output的内容中就添加了该portlet的view.jsp代码段落，而且还会增加portlet的标准头部和边框，如最小化，关闭等按钮及其对应的JavaScript代码。<br />
</font><font color="#000000"><font color="#99cc00">*****************************************************/</font><br />
}</font></p>
<p><font face="Courier New">return output;</font><br />
<font color="#99cc00">/* 这个output就是在portlet.jsp中要显示的内容 */</font></p>
<p><br />
<strong>portal.jsp<br />
</strong>------------<br />
<font face="Courier New">&lt;c:choose&gt;<br />
&nbsp; &lt;c:when test="&lt;%= themeDisplay.isStateExclusive() %&gt;"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;%= request.getAttribute(WebKeys.LAYOUT_CONTENT) %&gt;<br />
&nbsp; &lt;/c:when&gt;<br />
&nbsp; &lt;c:when test="&lt;%= themeDisplay.isStatePopUp() %&gt;"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;liferay-theme:include page="portal_pop_up.jsp" /&gt;<br />
&nbsp; &lt;/c:when&gt;<br />
&nbsp; &lt;c:otherwise&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;liferay-theme:include page="<font color="#ff0000">portal_normal.jsp</font>" /&gt;<br />
&nbsp; &lt;/c:otherwise&gt;<br />
&lt;/c:choose&gt;</font></p>
<p>在Liferay中没有发现portal_normal.jsp的踪影，发现portal_normal.vm似乎有点相关。portal_normal粉墨登场。</p>
<p><strong>portal_normal.vm<br />
</strong>-------------------------<br />
<font face="Courier New">#parse ($init)<br />
&lt;html dir="#language ("lang.dir")"&gt;<br />
&lt;head&gt;<br />
&nbsp; &lt;title&gt;$company_name - $the_title&lt;/title&gt;<br />
&nbsp;&nbsp;&nbsp; $theme.include($<font color="#ff0000">top_head_include</font>)<br />
&nbsp;&nbsp;&nbsp; #css ($css_main_file)<br />
&nbsp;&nbsp;&nbsp; #js ($js_main_file)<br />
&nbsp;&nbsp;&nbsp; #if ($company_logo != "")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;style type="text/css"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #banner .logo {background: url($company_logo) no-repeat;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; height: ${company_logo_height}px;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; width: ${company_logo_width}px; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/style&gt;<br />
&nbsp;&nbsp;&nbsp; #end<br />
&lt;/head&gt;</font></p>
<p><font face="Courier New">&lt;body class="$css_class"&gt;<br />
$theme.include($top_messages_include)<br />
&lt;div id="wrapper"&gt;<br />
&nbsp; &lt;div id="banner"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;div id="banner-inner"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;h1 class="logo"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a href="$company_url"&gt;$company_name&lt;/a&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/h1&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div id="page-search"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $theme.journalContentSearch()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #parse ("$full_templates_path/dock.vm")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #if ($update_available_url)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div class="popup-alert-notice"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a class="update-available" href="$update_available_url"&gt;#language("updates-are-available-for-liferay")&lt;/a&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #end<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #if ($has_navigation)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #parse ("$full_templates_path/navigation.vm")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #end<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/div&gt;</font></p>
<p><font face="Courier New">&nbsp;&nbsp;&nbsp; #if ($selectable)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $theme.include($content_include)<br />
&nbsp;&nbsp;&nbsp; #else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div id="content-wrapper" class="login"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $portletDisplay.recycle()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $portletDisplay.setTitle($the_title)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $theme.wrapPortlet("portlet.vm", $content_include)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />
&nbsp;&nbsp;&nbsp; #end</font></p>
<p><font face="Courier New">&nbsp;&nbsp;&nbsp; &lt;div id="footer"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p class="language"&gt;$theme.language()&lt;/p&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />
&lt;/div&gt;</font></p>
<p><font face="Courier New">$theme.include($bottom_ext_include)<br />
$theme.include($session_timeout_include)<br />
$theme.include($sound_alerts_include)</font></p>
<p><font face="Courier New">&lt;/body&gt;<br />
&lt;/html&gt;</font></p>
<p>可见关键是一些Velocity变量的值，例如$top_head_include。</p>
<p><br />
<strong>init.vm</strong><br />
----------<br />
<font face="Courier New">#set ($bottom_ext_include = "$dir_include/common/themes/bottom.jsp")<br />
<font color="#ff0000">#set ($content_include = "$dir_include$tilesContent")</font><br />
#set ($session_timeout_include = "$dir_include/common/themes/session_timeout.jsp")<br />
#set ($sound_alerts_include = "$dir_include/common/themes/sound_alerts.jsp")<br />
<font color="#ff0000">#set ($top_head_include = "$dir_include/common/themes/top_head.jsp")<br />
</font>#set ($top_messages_include = "$dir_include/common/themes/top_messages.jsp")</font></p>
<p>可见$top_head_include就是top_head.jsp。</p>
<p><strong>top_head.jsp</strong><br />
-------------------<br />
<font face="Courier New">&lt;%@ include file="/html/common/themes/top_js.jspf" %&gt;<br />
&lt;%@ include file="/html/common/themes/top_js-ext.jsp" %&gt;<br />
portal/portal-web/docroot/html/common/themes/top_js.jspf<br />
&lt;%<br />
&nbsp; String[] javaScriptFiles = PropsUtil.getArray(PropsUtil.JAVASCRIPT_FILES);<br />
&nbsp; for (int i = 0; i &lt; javaScriptFiles.length; i++) {<br />
%&gt;<br />
&lt;script src="&lt;%= themeDisplay.getPathJavaScript() %&gt;/&lt;%= javaScriptFiles[i] %&gt;"&nbsp;</font><font face="Courier New">type="text/javascript"&gt;&lt;/script&gt;<br />
&lt;%<br />
}<br />
%&gt;</font></p>
<p>那javascriptFiles又如何得到的呢？</p>
<p><strong>portal.properties<br />
</strong>------------------------<br />
<font face="Courier New">javascript.files=\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jquery/jquery.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jquery/cookie.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jquery/tabs.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/liferay.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/browser.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/util.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/language.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/layout.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/ajax.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/animate.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/auto_fields.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/color_picker.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/columns.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/dock.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/dynamic_select.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/freeform.js,\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay/layout_configuration.js,......</font></p>
<p>另外还有一个很重要的properties文件值得关注：language.properties。好累啊，还有很多细节可以继续挖掘，还涉及到Velocity的一些变量的操作，休息下先。</p>
&nbsp;<br />
<br />
<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2177391</p>
<img src ="http://www.blogjava.net/libin2722/aggbug/186274.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-03-14 14:11 <a href="http://www.blogjava.net/libin2722/archive/2008/03/14/186274.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入浅出Liferay Portal (2)  </title><link>http://www.blogjava.net/libin2722/archive/2008/03/14/186272.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Fri, 14 Mar 2008 06:10:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/03/14/186272.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/186272.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/03/14/186272.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/186272.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/186272.html</trackback:ping><description><![CDATA[&nbsp;
<p dragover="true">上篇讲到了安装JDK，ANT，JIKES，现在可以开始安装，配置，调试Liferay了。</p>
<p><span style="font-size: 10pt"><strong dragover="true">第 5 步 安装 Liferay Tomcat bundle<br />
<br />
</strong>将 liferay-portal-tomcat-5.5-jdk5-4.3.4.zip 解压到指定目录，如&#8220;D:\liferay\tomcat&#8221;，运行 bin 中的 startup.bat 就可以开启 tomcat 服务器，并且运行 liferay portal web 应用。 在浏览器中输入 <a href="http://localhost:8080/">http://localhost:8080/</a>，用户名为：<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#116;&#101;&#115;&#116;&#64;&#108;&#105;&#102;&#101;&#114;&#97;&#121;&#46;&#99;&#111;&#109;">test@liferay.com</a>，密码为：test。</span></p>
<span style="font-size: 10pt">
<p><br />
<strong>第 6 步 创建 Liferay Portal EXT 环境<br />
</strong><strong><br />
</strong>通过 EXT 环境，开发者可以将自己的代码和 liferay 源代码分离开来。<br />
将 liferay-portal-src-4.3.3.zip 解压到指定目录，例如"D:\liferay\portal"。在其根目录下创建一个新的文件 release.xbpeng.properties。其中 xbpeng 是该 windows 系统的目前用户名。文件的内容为：</p>
<p><span style="font-size: 10pt"><font face="Courier New">--------------------------------<br />
##<br />
## 指定所创建的 EXT 环境目录所在<br />
## 注意为正斜杠 /</font></span></p>
<p><span style="font-size: 10pt"><font face="Courier New">lp.ext.dir=D:/liferay/ext<br />
--------------------------------</font></span></p>
<p><span style="font-size: 10pt">进入 portal 目录，运行 ant clean start build-ext。经过若干分钟后，则会在 D:\liferay\ 中生成一个 ext 目录。该目录中包含了配置和开发 liferay portal 所需要的所有文件，以后可以在这个 EXT 环境中进行开发工作，然后配置到 tomcat 服务器。 </span></p>
<p><span style="font-size: 10pt"><strong>第7步 配置在EXT中开发好的新的portal系统到tomcat服务器</strong><br />
<br />
进入 EXT 环境目录，创建 app.server.xbpeng.properties，同样 xbpeng 为 windows 用户名。该文件内容为：</span></p>
<p><span style="font-size: 10pt"><font face="Courier New">---------------------------------------------------<br />
##<br />
## 指定 server 的类型为 tomcat，server 的安装路径<br />
## 注意为正斜杠 /</font></span></p>
<p><span style="font-size: 10pt"><font face="Courier New">app.server.type=tomcat<br />
app.server.tomcat.dir=D:/liferay/tomcat<br />
---------------------------------------------------</font></span></p>
<p><span style="font-size: 10pt">在 EXT 根目录运行 ant clean deploy，若干分钟后，则会把 EXT 的 web 应用拷贝配置到 tomcat 服务器。 </span></p>
<span style="font-size: 10pt">
<p><br />
<strong>第8步 搭建 Eclipse 环境用于开发portal<br />
</strong><br />
创建一个新的Java Project，例如名为EXT，选择从已有资源中创建，加入先前生成的ext 目录，这个项目用于自己定制portal之用。</p>
<p>点击菜单Window | Show View | Other | Ant，可以将Ant界面打开，然后将EXT项目中的build.xml拖至Ant，可有包括Clean，Deploy等各种动作可以执行。双击 Deploy则开始如上一步：将EXT的web应用配置到tomcat服务器。<br />
<br />
创建另一个新的Java Project，例如名为Portal Source，同样选择从已有资源中创建，加入先前生成的 portal 目录，这样项目包含Liferay的所有源代码，可用于调试。</p>
<p><strong>第9步 创建Liferay Portal调试环境</strong></p>
<p>点击菜单 Run | Run...，出现配置运行对话框。</p>
<p><strong>在Main页面：</strong><br />
新建一个Java Application，命名为Tomcat，Project选择为ext，Main class输入为org.apache.catalina.startup.Bootstrap。</p>
<p><strong>在Arguments页面：</strong><br />
Program arguments为start。VM arguments如下（注意修改对应的目录）：</p>
<p><font face="Courier New">-Xms128m<br />
-Xmx512m<br />
-Dfile.encoding=UTF8<br />
-Duser.timezone=GMT<br />
-Djava.security.auth.login.config=D:/liferay/tomcat/conf/jaas.config<br />
-Djava.endorsed.dirs=D:/liferay/tomcat/common/endorsed<br />
-Dcatalina.base=D:/liferay/tomcat<br />
-Dcatalina.home=D:/liferay/tomcat<br />
-Djava.io.tmpdir=D:/liferay/tomcat/temp</font></p>
<p>输入Working directory 为D:/liferay/tomcat。</p>
<p><strong>在JRE页面：</strong><br />
选择Project JRE；</p>
<p><strong>在Classpath页面：</strong><br />
中Bootstrap Entries为JRE System Library，User Entries为D:\liferay\tomcat\bin\中的bootstrap.jar。</p>
<p><strong>在Source页面：</strong><br />
加入EXT和Portal两个查询路径。<br />
<br />
配置好后，运行Run或者Debug，则可以开始对Liferay Portal系统进行断点调试了。</p>
<p><strong>第10步 最后强烈推荐Wireshark网络协议分析软件（Ethereal的前世今生）</strong></p>
<p>下载地址：<a href="http://www.wireshark.org/download.html">http://www.wireshark.org/download.html</a>，免费。</p>
<p>最开始很傻，没想起来要用，对于Liferay的处理过程经常是一团雾水，有了Wireshark，那简直是豁然开朗，很好，很强大。</p>
</span></span>
<img src ="http://www.blogjava.net/libin2722/aggbug/186272.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-03-14 14:10 <a href="http://www.blogjava.net/libin2722/archive/2008/03/14/186272.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入浅出Liferay Portal (1)   </title><link>http://www.blogjava.net/libin2722/archive/2008/03/14/186271.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Fri, 14 Mar 2008 06:09:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/03/14/186271.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/186271.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/03/14/186271.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/186271.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/186271.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
&nbsp;
<p><strong>安装文件及版本<br />
</strong>* JDK: jdk-1_5_0_14-windows-i586-p.exe<br />
* JIKES: jikes-1.22-1.windows.zip<br />
* ANT: apache-ant-1.7.0-bin.zip （在liferay portal 的 build-common.xml 中说明了要 1.7.0 以上）<br />
* LIFERAY: liferay-portal-tomcat-5.5-jdk5-4.3.4.zip<br />
* LIFERAY SOURCES: liferay-portal-src-4.3.3.zip<br />
* ECLIPSE: Eclipse wtp-all-in-one-sdk-R-1.0.2-200604280245-win32.zip <br />
&nbsp; (将新安装的 ant1.7.0 拷贝到 Eclipse 的 plug-in 中，覆盖老的 ant1.6.5， 解决无法在Eclipse中启用 ANT 的问题)</p>
<p><strong>第 1 步 安装 JDK<br />
</strong>运行 jdk-1_5_0_14-windows-i586-p.exe，安装完成后创建一个新的系统环境变量 JAVA_HOME，值为 JDK 安装所在目录，例如 "D:\Program Files\Java\jdk1.5.0_14". 在 PATH 系统环境变量中增加 JDK 的 bin 所在位置：%JAVA_HOME%\bin; <br />
（右键点击我的电脑，选择：属性 | 高级 | 环境变量 | 新建）</p>
<p><strong>第 2 步 安装 ANT<br />
</strong>将 apache-ant-1.7.0-bin.zip&nbsp; 文件解压到目的地，例如 "D:\liferay\apache-ant-1.7.0"，创建环境变量 ANT_HOME，为 ANT 的安装目录。在 PATH 环境变量中增加 ANT 的 bin 所在位置：%ANT_HOME%\bin</p>
<p><strong>第 3 步 安装 JIKES<br />
</strong>将 jikes-1.22-1.windows.zip文件解压到目的地，例如 "D:\liferay\jikes-1.22"，创建环境变量 JIKES_HOME，为 JIKES 的安装目录，在 PATH 环境变量中增加 JIKES 的 bin 所在位置：%JIKES_HOME%\bin</p>
<p><strong>第 4 步 验证<br />
</strong>在 command line 中分别运行 java &#8211;version，ant &#8211;version，jikes &#8211;version，如果输出结果正确，则说明安装配置正确。</p>
<img src ="http://www.blogjava.net/libin2722/aggbug/186271.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-03-14 14:09 <a href="http://www.blogjava.net/libin2722/archive/2008/03/14/186271.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>portal专题（一）用liferay server简单开发portlet快速上手</title><link>http://www.blogjava.net/libin2722/archive/2008/03/14/186260.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Fri, 14 Mar 2008 05:10:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/03/14/186260.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/186260.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/03/14/186260.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/186260.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/186260.html</trackback:ping><description><![CDATA[&nbsp;这里我们主要以4.0的版本为主，虽然还只是rc1版，但相信正式版应该很快就出来了。<br />
一、portal服务器下载和运行环境<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先访问liferay的官方网站http://www.liferay.com下载portal服务器，我们可以选择它的tomcat集成版下载，这样可以省去一些麻烦。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后启动bin目录下的statup.bat就启动了tomcat服务，然后通过http://localhost:8080访问就可以，默认的用户名和密码是 test@liferay.com/test。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 登录以后可以通过左方面的连接进入相关的操作：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;我的帐户&#8221;里可以进行个人信息，欢迎信息，语言等基本信息的设置。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;我的地方&#8221;可以分别进行个人，公开，gust，cms，suport等环境的设置，其实就相当于几个不同的虚拟站点。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 针对&#8220;我的地方&#8220;的每个站点可以进行&#8221;页设置&#8220;，即站点页面和级次的设置<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8221;增加内容&#8220;则是对当前所在的页面进行内容的添加或改变页面模版（但目前感觉它的范本设置还存在问题），如果要删除的话直接点击每个portlet的删除按钮就可以了。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另外在我的私人空间首页，即登录后默认的首页里，在&#8221;管理者&#8220;的portlet里我们可以进行相应的设置，像企业里可以改变站点的语言，banner图片等基本信息，portlets里可以进行目前的所有portlet的管理。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个里面基本上都是一些设置的熟悉和使用，相信每个地方都试一试就会有所了解了。<br />
<br />
二、简单的开发自己的portlet<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 做portlet开发通常首先也要建立一个独立的工程（避免和系统的混在一起不便于管理）。建立工程的时候不管是用jbuilder还是eclipse，和我们建立普通的web工程并没有什么不同。测试的例子以前网上有一篇介绍3.6.1的开发的写的很不错，我只是指出其中的一些不同和做一些补充，避免大家在多花去一些不必要的时间，我也是多花了几个小时才找出来的。<br />
<br />
1、portlet程序编写<br />
&nbsp;&nbsp;&nbsp; 其中HelloWorldPortlet和HelloJSPPortlet 是两个独立的portlet测试，只不过前面一个类似servlet直接输出，而后者使用了jsp页面的显示。<br />
<br />
package com.lyj.portal;<br />
<br />
import java.io.IOException;<br />
import javax.portlet.GenericPortlet;<br />
import javax.portlet.PortletException;<br />
import javax.portlet.RenderRequest;<br />
import javax.portlet.RenderResponse;<br />
<br />
public class HelloWorldPortlet extends GenericPortlet {<br />
&nbsp;&nbsp;&nbsp; public void doView(RenderRequest req, RenderResponse res)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; throws IOException, PortletException {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; res.setContentType("text/html");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; res.getWriter().println("HelloWorld liuyujun test one! 中文测试一");<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; public void doEdit(RenderRequest req, RenderResponse res)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; throws IOException, PortletException {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; res.setContentType("text/html");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; res.getWriter().println("HelloWorld liuyujun test two! 中文测试二");<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
<br />
package com.lyj.portal;<br />
<br />
import java.io.IOException;<br />
import javax.portlet.GenericPortlet;<br />
import javax.portlet.PortletException;<br />
import javax.portlet.PortletRequestDispatcher;<br />
import javax.portlet.RenderRequest;<br />
import javax.portlet.RenderResponse;<br />
import javax.portlet.PortletPreferences;<br />
import javax.portlet.ActionRequest;<br />
import javax.portlet.ActionResponse;<br />
<br />
public class HelloJSPPortlet extends GenericPortlet {<br />
&nbsp;&nbsp;&nbsp; public void doView(RenderRequest req, RenderResponse res) throws<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IOException, PortletException {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; res.setContentType("text/html");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String jspName = getPortletConfig().getInitParameter("view-jsp");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jspName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rd.include(req, res);<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; public void doEdit(RenderRequest req, RenderResponse res) throws<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IOException, PortletException {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; res.setContentType("text/html");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String jspName = getPortletConfig().getInitParameter("edit-jsp");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jspName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rd.include(req, res);<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
2、我们在工程的web的根目录下再增加HelloJSPPortlet需要用到的两个jsp文件<br />
view.jsp<br />
<br />
<span style="background-color: rgb(255,153,0)">&lt;%@ page language="java" contentType="text/html;charset=GBK"%&gt;</span><br />
&lt;table cellpadding="8" cellspacing="0" width="100%"&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;<br />
&lt;font class="Portlet-font" style="font-size: x-small;"&gt;<br />
This is a &lt;b&gt;Sample JSP Portlet&lt;/b&gt; used in viewing model。 Use this as a quick<br />
wayy to include JSPs。 view 成功<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
<br />
<br />
edit.jsp<br />
<span style="background-color: rgb(255,102,0)">&lt;%@ page language="java" contentType="text/html;charset=GBK"%&gt;</span><br />
&lt;table cellpadding="8" cellspacing="0" width="100%"&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;<br />
&lt;font class="Portlet-font" style="font-size: x-small;"&gt;<br />
This is a &lt;b&gt;Sample JSP Portlet&lt;/b&gt; used in viewing model。 Use this as a quick<br />
wayy to include JSPs。edit 万岁<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
<br />
注意橙色背景的内容一定要加上，不然会有中文乱码问题<br />
<br />
3、web.xml配置<br />
&lt;?xml version="1.0"?&gt;<br />
&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"&gt;<br />
&lt;web-app id="TestPortal"&gt;<br />
&nbsp; &lt;display-name&gt;TestPortal&lt;/display-name&gt;<br />
<span style="color: rgb(0,0,255)">&nbsp; &lt;context-param&gt;</span><br style="color: rgb(0,0,255)" />
<span style="color: rgb(0,0,255)">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;param-name&gt;company_id&lt;/param-name&gt;</span><br style="color: rgb(0,0,255)" />
<span style="color: rgb(0,0,255)">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;param-value&gt;liferay.com&lt;/param-value&gt;</span><br style="color: rgb(0,0,255)" />
<span style="color: rgb(0,0,255)">&nbsp;&nbsp;&nbsp; &lt;/context-param&gt;</span><br />
&nbsp; <span style="color: rgb(255,0,0)">&lt;listener&gt;</span><br style="color: rgb(255,0,0)" />
<span style="color: rgb(255,0,0)">&nbsp;&nbsp;&nbsp; &lt;listener-class&gt;com.liferay.portal.shared.servlet.PortletContextListener&lt;/listener-class&gt;</span><br style="color: rgb(255,0,0)" />
<span style="color: rgb(255,0,0)">&nbsp; &lt;/listener&gt;</span><br />
&nbsp; &lt;servlet&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;HelloWorldPortlet&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;com.liferay.portal.servlet.PortletServlet&lt;/servlet-class&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;portlet-class&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;com.lyj.portal.HelloWorldPortlet&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;load-on-startup&gt;0&lt;/load-on-startup&gt;<br />
&nbsp; &lt;/servlet&gt;<br />
&nbsp; &lt;servlet-mapping&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;HelloWorldPortlet&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/HelloWorldPortlet/*&lt;/url-pattern&gt;<br />
&nbsp; &lt;/servlet-mapping&gt;<br />
&nbsp; &lt;servlet&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;HelloJSPPortlet&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;com.liferay.portal.servlet.PortletServlet&lt;/servlet-class&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;Portlet-class&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;com.lyj.portal.HelloJSPPortlet&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;load-on-startup&gt;0&lt;/load-on-startup&gt;<br />
&nbsp; &lt;/servlet&gt;<br />
&nbsp; &lt;servlet-mapping&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;HelloJSPPortlet&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/HelloJSPPortlet/*&lt;/url-pattern&gt;<br />
&nbsp; &lt;/servlet-mapping&gt;<br />
&nbsp; &lt;taglib&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;taglib-uri&gt;http://java.sun.com/portlet&lt;/taglib-uri&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;taglib-location&gt;/WEB-INF/tld/liferay-portlet.tld&lt;/taglib-location&gt;<br />
&nbsp; &lt;/taglib&gt;<br />
&lt;/web-app&gt;<br />
<br />
其中红色字体和蓝色字体的内容，如果以前使用3.6.1的一定要注意，蓝色部分以前是不需要加的，但是现在是必须的，如果不加的话，在portal管理列表里能列出我们开发的portlet，但在添加内容时无法找到我们自己的portlet。红色字体的部分相对原来多了shared，也就是它的类包进行了一定的调整，注意一下就可以了。<br />
<br />
4、另外增加WEB-INF下增加portlet的私有配置文件<br />
portlet.xml<br />
<br />
&lt;?xml version="1.0"?&gt;<br />
&lt;portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"&gt;<br />
&nbsp; &lt;portlet&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;portlet-name&gt;HelloWorldPortlet&lt;/portlet-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;display-name&gt;HelloWorldPortlet&lt;/display-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;portlet-class&gt;com.lyj.portal.HelloWorldPortlet&lt;/portlet-class&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;expiration-cache&gt;0&lt;/expiration-cache&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;supports&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mime-type&gt;text/html&lt;/mime-type&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/supports&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;supports&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mime-type&gt;text/html&lt;/mime-type&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;portlet-mode&gt;edit&lt;/portlet-mode&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/supports&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;portlet-info&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;title&gt;HelloWorldPortlet&lt;/title&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;short-title&gt;HelloWorldPortlet&lt;/short-title&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;keywords&gt;HelloWorldPortlet&lt;/keywords&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/portlet-info&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;portlet-preferences&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;preference&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;portlet-title&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/preference&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;preference&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;show-portlet-borders&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;true&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/preference&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/portlet-preferences&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;security-role-ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;role-name&gt;guest&lt;/role-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/security-role-ref&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;security-role-ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;role-name&gt;power user&lt;/role-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/security-role-ref&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;security-role-ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;role-name&gt;user&lt;/role-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/security-role-ref&gt;<br />
&nbsp; &lt;/portlet&gt;<br />
&nbsp; &lt;portlet&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;portlet-name&gt;HelloJSPPortlet&lt;/portlet-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;display-name&gt;HelloJSPPortlet&lt;/display-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;portlet-class&gt;com.lyj.portal.HelloJSPPortlet&lt;/portlet-class&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;view-jsp&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;/view.jsp&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;edit-jsp&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;/edit.jsp&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;expiration-cache&gt;0&lt;/expiration-cache&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;supports&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mime-type&gt;text/html&lt;/mime-type&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/supports&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;supports&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mime-type&gt;text/html&lt;/mime-type&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;portlet-mode&gt;edit&lt;/portlet-mode&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/supports&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;portlet-info&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;title&gt;HelloJSPPortlet&lt;/title&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;short-title&gt;HelloJSPPortlet&lt;/short-title&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;keywords&gt;HelloJSPPortlet&lt;/keywords&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/portlet-info&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;security-role-ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;role-name&gt;guest&lt;/role-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/security-role-ref&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;security-role-ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;role-name&gt;power user&lt;/role-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/security-role-ref&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;security-role-ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;role-name&gt;user&lt;/role-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/security-role-ref&gt;<br />
&nbsp; &lt;/portlet&gt;<br />
&lt;/portlet-app&gt;<br />
<br />
liferay-portlet.xml<br />
<br />
&lt;?xml version="1.0"?&gt;<br />
&lt;!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 3.5.0//EN" "http://www.liferay.com/dtd/liferay-portlet-app_3_5_0.dtd"&gt;<br />
<br />
&lt;liferay-portlet-app&gt;<br />
&nbsp; &lt;portlet&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;portlet-name&gt;HelloWorldPortlet&lt;/portlet-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;struts-path&gt;HelloWorldPortlet&lt;/struts-path&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;use-default-template&gt;true&lt;/use-default-template&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;instanceable&gt;true&lt;/instanceable&gt;<br />
&nbsp; &lt;/portlet&gt;<br />
&nbsp; &lt;portlet&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;portlet-name&gt;HelloJSPPortlet&lt;/portlet-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;struts-path&gt;HelloJSPPortlet&lt;/struts-path&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;use-default-template&gt;true&lt;/use-default-template&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;instanceable&gt;true&lt;/instanceable&gt;<br />
&nbsp; &lt;/portlet&gt;<br />
&nbsp; &lt;role-mapper&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;role-name&gt;administrator&lt;/role-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;role-link&gt;Administrator&lt;/role-link&gt;<br />
&nbsp; &lt;/role-mapper&gt;<br />
&nbsp; &lt;role-mapper&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;role-name&gt;guest&lt;/role-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;role-link&gt;Guest&lt;/role-link&gt;<br />
&nbsp; &lt;/role-mapper&gt;<br />
&nbsp; &lt;role-mapper&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;role-name&gt;power user&lt;/role-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;role-link&gt;Power User&lt;/role-link&gt;<br />
&nbsp; &lt;/role-mapper&gt;<br />
&nbsp; &lt;role-mapper&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;role-name&gt;user&lt;/role-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;role-link&gt;User&lt;/role-link&gt;<br />
&nbsp; &lt;/role-mapper&gt;<br />
&lt;/liferay-portlet-app&gt;<br />
<br />
liferay-display.xml<br />
<br />
&lt;?xml version="1.0"?&gt;<br />
&lt;!DOCTYPE display PUBLIC "-//Liferay//DTD Display 3.5.0//EN" "http://www.liferay.com/dtd/liferay-display_3_5_0.dtd"&gt;<br />
&lt;display&gt;<br />
&nbsp; &lt;category name="category.test"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;portlet id="HelloWorldPortlet"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;portlet id="HelloJSPPortlet"/&gt;<br />
&nbsp; &lt;/category&gt;<br />
&lt;/display&gt;<br />
<br />
5、在WEB-INF下新建一个tld目录，把 tomcat\liferay\WEB-INF\tld\liferay-portlet.tld 复制过来就可以了<br />
6、编译完成后，像我们正常的发布web的方式发布就可以了，比如修改tomcat的配置文件，直接用一个虚拟目录TestPortal指向我们工程的web 目录；或者把我们的web目录打包成TestPortal.war放到tomcat的webapps目录下就可以了。重新启动tomcat，登录后，我们会在portlet管理中发现增加了HelloWorldPortlet，HelloJSPPortlet两个portlet，在增加内容的时候在弹出的内容页面 测试（test）中多了上述的两个portlet。并且可以增加到我们的页面中看看效果吧。 
<img src ="http://www.blogjava.net/libin2722/aggbug/186260.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-03-14 13:10 <a href="http://www.blogjava.net/libin2722/archive/2008/03/14/186260.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>liferay 部署</title><link>http://www.blogjava.net/libin2722/archive/2008/03/08/184634.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Sat, 08 Mar 2008 01:42:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/03/08/184634.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/184634.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/03/08/184634.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/184634.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/184634.html</trackback:ping><description><![CDATA[&nbsp;<span class="bright-message-list"><span class="bright-message-list">部署自己的Portlet<br />
Liferay Portal跟Tomcat5.0集成在一起，从本质上讲，liferay-portal-pro-3.6.0-tomcat.zip是一个Tomcat 压缩包，只是其中将liferay作为默认应用，并将跟Portlet有关的操作都交给liferay应用处理而已。因此，Liferay Portal支持所有针对Tomcat5.0的部署方式，包括：手动部署、Ant部署，并且支持热部署。<br />
第一节&nbsp; 手动部署<br />
手动部署可以采用拷贝文件夹、war部署、编写部署文件三种方式：<br />
①、拷贝文件夹：与单纯的Tomcat一样，我们可以将{APP_HOME}\webapp目录拷贝到{PORTAL_HOME}\webapps\下，该 webapp目录名为TestPortal。启动Liferay Portal（双击{PORTAL_HOME}\bin\startup。bat）即可。<br />
②、war部署：或者将{APP_HOME}\ webapp打包成TestPortal.war，拷贝war到{PORTAL_HOME}\webapps\下，启动Liferay Portal，让Tomcat自动解压。在命令行模式下切换到{APP_HOME}\webapp目录，执行 jar cvf TestPortal.war * 。<br />
③、编写部署文件：<br />
{PORTAL_HOME}\conf\Catalina\localhost目录下，创建TestPortal.xml文件，内容如下：<br />
&lt;Context path="/TestPortal" docBase="D:\TestPortal\webapp" debug="0" reloadable="true" crossContext="true"&gt;<br />
&lt;/Context&gt;<br />
部署成功后，登录Liferay Portal，可以在桌面底部的下拉列表中看到HelloWorldPortlet和HelloJSPPortlet两个Portlet。将它们添加到桌面中。<br />
第二节&nbsp; Ant自动部署<br />
确保之前已经安装Apache Ant，并正确添加ANT_HOME到系统环境变量。<br />
①、拷贝之前打包的TestPortlet.war到{APP_HOME}/deploy目录；<br />
②、从http://prdownloads。sourceforge。net/lportal/Portlet-deployer-3。6。0。xml 下载Portlet-deployer-3.6.0.xml 到{APP_HOME}\deploy，改名为build。xml以便Ant自动加载；<br />
③、确保JDK1.4.2和Ant 1.6安装成功，并配置到系统环境变量；<br />
④、确保Tomcat或者其他服务器已经正确安装，或者Liferay Portal正常安装。<br />
编辑build.xml，使其只想你的应用服务器或者Servlet容器。比如，如果你安装JBoss+Jetty到/opt/liferay目录，那么编辑build.xml，确保只有JBoss+Jetty部分没有被注释，修改app.server属性为/opt/liferay。<br />
Build.xml默认是开启JBoss+Jetty部分，本文采用的是Tomcat集成包，所以将JBoss+Jetty部分注释掉，开始Tomcat部分。修改app.server.dir属性，指向{PORTAL_HOME}。如下图：<br />
⑤、命令行切换到到{APP_HOME}/deploy目录，执行 ant deploy ，系统会自动将TestPortal。war解压，必要时修改web.xml、portlet.xml等部署文件，将解压后的TestPortal文件夹拷贝到{PORTAL_HOME}\webapps目录下。<br />
启动Liferay Portal之前，建议先确认修改后的web.xml、portlet.xml等部署文件是否正确。<br />
第三节&nbsp; 加入Liferay Portal自有列表<br />
之前我们提到过，Liferay Portal集成了78个默认的Portlet应用。这些应用都通过{PORTAL_HOME}\liferay\WEB-INF\目录下的 portlet.xml、liferay-portlet.xml、liferay-display。xml描述。我们只要更改这些描述文件，就可以将我们自己的应用加入到Liferay Portal的Portlet列表中了，效果跟手动部署和Ant自动部署一样。<br />
①、拷贝{APP_HOME}\webapp目录的内容到{PORTAL_HOME}\liferay\html\Portlet目录下，更改文件夹名称为TestPortal。<br />
②、将TestPortal\WEB-INF\classes文件夹剪切到{PORTAL_HOME}\liferay\WEB-INF目录下。<br />
③、将TestPortal\WEB-INF\web。xml中&lt;servlet&gt;、&lt;servlet-mapping&gt;的内容合并到{PORTAL_HOME}\liferay\WEB-INF\web.xml中。删除TestPortal\WEB-INF\web.xml。<br />
④、将TestPortal\WEB-INF\Portlet.xml中关于HelloWorldPortlet和HelloJSPPortlet的&lt; portlet&gt;的内容合并到{PORTAL_HOME}\liferay\WEB-INF\portlet.xml中。删除TestPortal \WEB-INF\ portlet.xml。<br />
⑤、将TestPortal\WEB-INF\liferay-portlet.xml中关于 HelloWorldPortlet和HelloJSPPortlet的&lt;portlet&gt;的内容合并到{PORTAL_HOME}\ liferay\WEB-INF\liferay-portlet.xml中。删除TestPortal\WEB-INF\liferay- portlet.xml。<br />
⑥、将TestPortal\WEB-INF\liferay-display.xml中关于 HelloWorldPortlet和HelloJSPPortlet的&lt;portlet&gt;的内容合并到{PORTAL_HOME}\ liferay\WEB-INF\liferay- display.xml中。删除TestPortal\WEB-INF\ liferay- display.xml。<br />
这个方法比较复杂，而且不容易扩展和调试，通常不建议采用。<br />
第四节&nbsp; 普通Java Web应用转化为Portlet应用<br />
随着开发的深入，我们希望能够将原来的Java Web应用迁移到Liferay Portal，构建真正的企业门户。Liferay Portal灵活的二次开发机制，允许用户将各种各样的内容集成到Portal平台上来，消除信息孤岛。将一个Java Web应用转化为Portlet应用的步骤如下：<br />
①、撰写扩展自GenericPortlet的Portlet和JSP页面。这个Portlet可以使用PrintWriter输出或者调用JSP页面输出方式。通常，如果Java Web应用是采用MVC三层模式，那么只需要更改View层就可以了。<br />
②、修改web.xml，增加2。6。1所述的Portlet监听器和Portlet标签库，增加针对上步骤所写的servlet和servlet映射。<br />
&lt;servlet&gt;<br />
&lt;servlet-name&gt;yourPortlet&lt;/servlet-name&gt;<br />
&lt;servlet-class&gt;com.liferay.portal.servlet.PortletServlet&lt;/servlet-class&gt;<br />
&lt;init-param&gt;<br />
&lt;param-name&gt;Portlet-class&lt;/param-name&gt;<br />
&lt;param-value&gt;full.name.of.yourPortlet&lt;/param-value&gt;<br />
&lt;/init-param&gt;<br />
&lt;load-on-startup&gt;0&lt;/load-on-startup&gt;<br />
&lt;/servlet&gt;<br />
&lt;servlet-mapping&gt;<br />
&lt;servlet-name&gt;yourPortlet&lt;/servlet-name&gt;<br />
&lt;url-pattern&gt;/yourPortlet/*&lt;/url-pattern&gt;<br />
&lt;/servlet-mapping&gt;<br />
③、创建portlet.xml，增加相应的Portlet定义信息，规范参考2.6.2。<br />
④、创建liferay-portlet.xml，增加相应的Portlet定义信息，规范参考2.6.3。<br />
⑤、创建liferay-display.xml，增加相应的Portlet类别定义信息，规范参考2.6.4。<br />
⑥、拷贝portlet.jar和liferay-Portlet.tld到当前应用。其中，portlet.jar是Portlet API包，作用类似servlet-api.jar，位于{PORTAL_HOME}\common\lib\ext\liferay- portlet.tld是Liferay Portal提供的Portlet标签库。<br />
⑦、选择适当的部署方式，将修改后的Java Web应用部署到Portlet平台上。</span></span> 
<img src ="http://www.blogjava.net/libin2722/aggbug/184634.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-03-08 09:42 <a href="http://www.blogjava.net/libin2722/archive/2008/03/08/184634.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Liferay Portal学习笔记之（五）：开发主题风格theme</title><link>http://www.blogjava.net/libin2722/archive/2008/03/02/183329.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Sun, 02 Mar 2008 15:27:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/03/02/183329.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/183329.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/03/02/183329.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/183329.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/183329.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: LiferayPortal为我们提供了非常灵活的主题风格定制功能，自身带了四种风格的theme，在官方网站上提供了很多风格theme的下载，这无疑大大增强了主题风格定制的功能。但是，我们完全可以开发具有自己风格的theme，这里，我们将讨论怎样来开发个性的theme。第一步：我们将以现有风格classic为模板文件创建新的theme，我们将新theme命名为coldtear1、...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/archive/2008/03/02/183329.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/183329.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-03-02 23:27 <a href="http://www.blogjava.net/libin2722/archive/2008/03/02/183329.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Liferay Portal学习笔记（四）：搭建开发环境</title><link>http://www.blogjava.net/libin2722/archive/2008/03/02/183321.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Sun, 02 Mar 2008 15:00:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/03/02/183321.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/183321.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/03/02/183321.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/183321.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/183321.html</trackback:ping><description><![CDATA[<div id="art" width="560" style="margin: 15px;">
<p style="margin: 0cm 0cm 0pt;">
<span style="font-family: 宋体;">当我们再对</span>
liferay
<span style="font-family: 宋体;">源代码进行研究或者对某个类进行修改的时候很不方便，所以我们需要搭建一个开发环境，这样在修改</span>
liferay
<span style="font-family: 宋体;">源代码的时候就更加方便。下面我们会一步步搭建</span>
liferay
<span style="font-family: 宋体;">的开发环境。</span>
</p>
<p style="margin: 0cm 0cm 0pt;">
&nbsp;
</p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt;">
<span>
一、
</span>
<span style="font-family: 宋体;">准备工作</span>
</p>
<p style="margin: 0cm 0cm 0pt;">
1
<span style="font-family: 宋体;">、下载下列文件，下载步骤这里省略：</span>
</p>
<p style="margin: 0cm 0cm 0pt;">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jdk-1_5_0_06-windows-i586-p.exe
</p>
<p style="margin: 0cm 0cm 0pt;">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay-portal-tomcat-jdk5-4.0.0.zip
</p>
<p style="margin: 0cm 0cm 0pt;">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay-portal-src-4.0.0.zip
</p>
<p style="margin: 0cm 0cm 0pt;">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liferay-portal-sql-4.0.0.zip
</p>
<p style="margin: 0cm 0cm 0pt;">
2
<span style="font-family: 宋体;">、安装</span>
JDK
<span style="font-family: 宋体;">，具体的安装及配置过程这里省略。</span>
</p>
<p style="margin: 0cm 0cm 0pt;">
3
<span style="font-family: 宋体;">、我们假定</span>
Eclipse
<span style="font-family: 宋体;">及</span>
Tomcat
<span style="font-family: 宋体;">插件都已安装，若还没有安装，请参考相关文档准备好开发工具，这里省略该步骤。</span>
</p>
<p style="margin: 0cm 0cm 0pt;">
4
<span style="font-family: 宋体;">、如果对</span>
liferay
<span style="font-family: 宋体;">安装过程有疑问，可参考作者的另一篇文章。</span>
</p>
<p style="margin: 0cm 0cm 0pt;">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="../../coldtear/archive/2006/08/03/61454.html" target="_blank">Liferay Portal<span style="font-family: 宋体;">学习笔记（一）：安装</span></a>
</p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt;">
<span>
二、
</span>
<span style="font-family: 宋体;">搭建开发环境</span>
</p>
<span>
<span>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;">
<span>
1、&nbsp;
</span>
<span style="font-family: 宋体;">在</span>
Eclipse
<span style="font-family: 宋体;">中新建项目</span>
liferayPortal
<span style="font-family: 宋体;">，并设置源文件夹为</span>
src
<span style="font-family: 宋体;">，输入文件夹名为</span>
liferay/WEB-INF/classes
<span style="font-family: 宋体;">。</span>
</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;">
<span>
2、&nbsp;
</span>
<span style="font-family: 宋体;">将</span>
liferay-portal-tomcat-jdk5-4.0.0.zip
<span style="font-family: 宋体;">解压缩后并拷贝到项目</span>
liferayPortal
<span style="font-family: 宋体;">根目录下，然后改名为</span>
tomcat
<span style="font-family: 宋体;">。</span>
</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;">
<span>
3、&nbsp;
</span>
<span style="font-family: 宋体;">将</span>
liferayPortal/tomcat
<span style="font-family: 宋体;">目录下的</span>
liferay
<span style="font-family: 宋体;">目录剪切到项目</span>
liferayPortal
<span style="font-family: 宋体;">根目录下覆盖原目录。</span>
</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;">
<span>
4、&nbsp;
</span>
<span style="font-family: 宋体;">将</span>
liferay-portal-src-4.0.0.zip
<span style="font-family: 宋体;">解压缩，然后将</span>
liferay-4.0.0-src/portal-ejb/src
<span style="font-family: 宋体;">目录下的</span>
com
<span style="font-family: 宋体;">文件夹拷贝到项目</span>
liferayPortal/src
<span style="font-family: 宋体;">目录下。</span>
</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;">
<span>
5、&nbsp;
</span>
<span style="font-family: 宋体;">将</span>
liferay-4.0.0-src/util-jsf/src/com/liferay
<span style="font-family: 宋体;">目录下的</span>
util
<span style="font-family: 宋体;">文件夹拷贝到项目</span>
liferayPortal/src/com/liferay/
<span style="font-family: 宋体;">目录下。</span>
</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;">
<span>
6、&nbsp;
</span>
<span style="font-family: 宋体;">拷贝</span>
liferay-4.0.0-src/portal-ejb/classes
<span style="font-family: 宋体;">目录下除</span>
com
<span style="font-family: 宋体;">文件夹外其他全部的文件夹及文件到项目</span>
liferayPortal/src
<span style="font-family: 宋体;">目录下。</span>
</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;">
<span>
7、&nbsp;
</span>
<span style="font-family: 宋体;">拷贝</span>
liferay-4.0.0-src/portal-ejb/classes/com/liferay/portal
<span style="font-family: 宋体;">下的</span>
definitions
<span style="font-family: 宋体;">文件夹到项目</span>
liferayPortal/src/com/liferay/portal
<span style="font-family: 宋体;">目录下。</span>
</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;">
<span>
8、&nbsp;
</span>
<span style="font-family: 宋体;">修改</span>
liferayPortal/tomcat/conf/Catalina/localhost
<span style="font-family: 宋体;">目录下的</span>
ROOT.xml
<span style="font-family: 宋体;">文件中的</span>
docBase
<span style="font-family: 宋体;">路径，指向</span>
liferayPortal/liferay
<span style="font-family: 宋体;">目录。</span>
</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;">
<span>
9、&nbsp;
</span>
<span style="font-family: 宋体;">将</span>
liferay-4.0.0-src/lib
<span style="font-family: 宋体;">目录下的所有</span>
jar
<span style="font-family: 宋体;">包全部添加到项目</span>
liferayPortal
<span style="font-family: 宋体;">中。</span>
</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;">
<span>
10、
</span>
<span style="font-family: 宋体;">将</span>
liferayPortal/liferay/WEB-INF/lib
<span style="font-family: 宋体;">下的</span>
compression-filter.jar
<span style="font-family: 宋体;">、</span>
counter-ejb.jar
<span style="font-family: 宋体;">、</span>
documentlibrary-ejb.jar
<span style="font-family: 宋体;">、</span>
ext-ejb.jar
<span style="font-family: 宋体;">、</span>
lock-ejb.jar
<span style="font-family: 宋体;">、</span>
mail-ejb.jar
<span style="font-family: 宋体;">、</span>
secure-&nbsp;&nbsp;filter.jar
<span style="font-family: 宋体;">、</span>
strip-filter.jar
<span style="font-family: 宋体;">、</span>
util-java.jar
<span style="font-family: 宋体;">、</span>
util-taglib.jar
<span style="font-family: 宋体;">、</span>
util-wsrp.jar
<span style="font-family: 宋体;">共</span>
11
<span style="font-family: 宋体;">个包加到项目中。</span>
</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;">
<span>
11、
</span>
<span style="font-family: 宋体;">将</span>
liferayPortal/tomcat/common/lib/ext
<span style="font-family: 宋体;">目录下的</span>
portal-shared.jar
<span style="font-family: 宋体;">包加到项目中。</span>
</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;">
<span>
12、
</span>
<span style="font-family: 宋体;">在</span>
liferayPortal/src
<span style="font-family: 宋体;">目录下新建文件</span>
portal-ext.properties
<span style="font-family: 宋体;">，内容为：</span>
</p>
<p style="margin: 0cm 0cm 0pt; text-indent: 42pt;">
portal.release=professional
</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;">
<span>
13、
</span>
<span style="font-family: 宋体;">在&#8220;首选项－</span>
&gt;Java
<span style="font-family: 宋体;">—</span>
&gt;
<span style="font-family: 宋体;">已安装的</span>
JRE
<span style="font-family: 宋体;">&#8221;里选择之前安装的</span>
jre1.5.0_06
<span style="font-family: 宋体;">。<br />
</span>
<img alt="1.JPG" src="../../images/blogjava_net/coldtear/development/1.JPG" border="0" height="637" width="815" />&nbsp;</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;">
<span>
14、
</span>
<span style="font-family: 宋体;">在&#8220;首选项－</span>
&gt;Tomcat
<span style="font-family: 宋体;">&#8221;项中指定</span>
tomcat
<span style="font-family: 宋体;">的版本为</span>
Version 5.x
<span style="font-family: 宋体;">，并且指定&#8220;</span>
Tomcat home
<span style="font-family: 宋体;">&#8221;路径为项目</span>
liferayPortal/tomcat
<span style="font-family: 宋体;">目录。</span>
<br />
<img alt="2.JPG" src="../../images/blogjava_net/coldtear/development/2.JPG" border="0" height="639" width="816" />
<br />
</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;">
<span>
15、
</span>
<span style="font-family: 宋体;">在&#8220;首选项－</span>
&gt;Tomcat
<span style="font-family: 宋体;">－</span>
&gt;JVM Settings
<span style="font-family: 宋体;">&#8221;项，设定</span>
JRE
<span style="font-family: 宋体;">的版本为&#8220;</span>
jre1.5.0_06<span style="font-family: 宋体;">&#8221;<span style="font-family: 宋体;">，并且添加如下几个</span>JVM Parameters</span>
<span style="font-family: 宋体;">：</span>
</p>
<p style="margin: 0cm 0cm 0pt;">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -Xms128m
</p>
<p style="margin: 0cm 0cm 0pt;">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -Xmx512m
</p>
<p style="margin: 0cm 0cm 0pt;">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -Dfile.encoding=UTF8
</p>
<p style="margin: 0cm 0cm 0pt;">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -Duser.timezone=GMT+08
</p>
<p style="margin: 0cm 0cm 0pt;">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-Djava.security.auth.login.config=D:"devtool"eclipse"workspace"liferayPortal"tomcat"conf"jaas.config
</p>
<p style="margin: 0cm 0cm 0pt;">
<span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; 这里最后一个参数一定要指明</span>
jaas.config
<span style="font-family: 宋体;">文件的路径<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img alt="3.JPG" src="../../images/blogjava_net/coldtear/development/3.JPG" border="0" height="640" width="967" /><br />
三、<span style="font-family: 宋体;">创建数据库</span></p>
<p style="margin: 0cm 0cm 0pt;">
1
<span style="font-family: 宋体;">、本例中我们已</span>
SQL Server
<span style="font-family: 宋体;">数据库为例，介绍怎样连接数据库。</span>
</p>
<p style="margin: 0cm 0cm 0pt;">
2
<span style="font-family: 宋体;">、解压缩</span>
liferay-portal-sql-4.0.0.zip
<span style="font-family: 宋体;">文件后，导入目录</span>
liferay-portal-sql-4.0.0/create
<span style="font-family: 宋体;">下的</span>
create-sql-server.sql
<span style="font-family: 宋体;">文件即可建立</span>
liferay
<span style="font-family: 宋体;">应用在</span>
SQL Server
<span style="font-family: 宋体;">上的数据库，数据库名为</span>
lportal
<span style="font-family: 宋体;">。</span>
</p>
<p style="margin: 0cm 0cm 0pt;">
<span style="font-family: 宋体;">（导入</span>
sql
<span style="font-family: 宋体;">文件命令参见</span>
C:"Program Files"Microsoft SQL Server"80"Tools"Binn"osql.exe
<span style="font-family: 宋体;">）</span>
</p>
<p style="margin: 0cm 0cm 0pt 5.25pt; text-indent: -5.25pt;">
3
<span style="font-family: 宋体;">、修改</span>
liferayPortal/tomcat/conf/Catalina/localhost
<span style="font-family: 宋体;">目录下的</span>
ROOT.xml
<span style="font-family: 宋体;">文件，指定连接</span>
SQLServer
<span style="font-family: 宋体;">的驱动类名称、数据库</span>
URL
<span style="font-family: 宋体;">及用户和密码，修改结果如下：</span>
</p>
<table style="border: medium none ; background: #e0e0e0 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0">
    <tbody>
        <tr>
            <td style="padding: 0cm 5.4pt; width: 426.1pt; background-color: transparent;" valign="top" width="568">
            <p style="margin: 0cm 0cm 0pt;">
            &lt;Resource
            </p>
            <p style="margin: 0cm 0cm 0pt;">
            <span>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name="jdbc/LiferayPool"</span>
            </p>
            <p style="margin: 0cm 0cm 0pt;">
            <span>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; auth="Container"</span>
            </p>
            <p style="margin: 0cm 0cm 0pt;">
            <span>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="javax.sql.DataSource"</span>
            </p>
            <p style="margin: 0cm 0cm 0pt;">
            <span>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; driverClassName="net.sourceforge.jtds.jdbc.Driver"</span>
            </p>
            <p style="margin: 0cm 0cm 0pt;">
            <span>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url="jdbc:jtds:sqlserver://localhost:1433;DatabaseName=lportal"</span>
            </p>
            <p style="margin: 0cm 0cm 0pt;">
            <span>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; username="sa"</span>
            </p>
            <p style="margin: 0cm 0cm 0pt;">
            <span>
            &nbsp;&nbsp;&nbsp; password="sa"</span>
            </p>
            <p style="margin: 0cm 0cm 0pt;">
            <span>
            &nbsp;&nbsp;&nbsp; maxActive="100"</span>
            </p>
            <p style="margin: 0cm 0cm 0pt;">
            /&gt;
            </p>
            </td>
        </tr>
    </tbody>
</table>
<p style="margin: 0cm 0cm 0pt;">
4
<span style="font-family: 宋体;">、拷贝</span>
liferay-4.0.0-src/lib
<span style="font-family: 宋体;">目录下的</span>
jtds.jar
<span style="font-family: 宋体;">包到</span>
liferayPortal/tomcat/common/lib/ext
<span style="font-family: 宋体;">目录下。</span>
</p>
<p style="margin: 0cm 0cm 0pt;">
<span style="font-family: 宋体;">四、启动服务器</span>
</p>
<span style="font-family: 宋体;">
<p style="margin: 0cm 0cm 0pt;">
<span style="font-family: 宋体;">在</span>
<span>
<font face="Times New Roman">Eclipse</font>
</span>
<span style="font-family: 宋体;">中启动</span>
<span>
<font face="Times New Roman">Tomcat</font>
</span>
<span style="font-family: 宋体;">，当出现如下画面时，表示</span>
<span>
<font face="Times New Roman">Tomcat</font>
</span>
<span style="font-family: 宋体;">启动成功。<br />
<img alt="4.JPG" src="../../images/blogjava_net/coldtear/development/4.JPG" border="0" height="345" width="1267" /><br />
</span>
</p>
</span>&nbsp;<span style="font-family: 宋体;">在浏览器中访问：</span><a href="http://localhost:8080/">http://localhost:8080</a><span style="font-family: 宋体;">即可出现</span>liferay<span style="font-family: 宋体;">界面。</span>
<p style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">到此，我们的开发环境已经搭建完成。</span></p>
</span></span>
</div>
<img src ="http://www.blogjava.net/libin2722/aggbug/183321.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-03-02 23:00 <a href="http://www.blogjava.net/libin2722/archive/2008/03/02/183321.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Liferay Portal学习笔记（三）：自定义页面布局Template</title><link>http://www.blogjava.net/libin2722/archive/2008/03/02/183319.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Sun, 02 Mar 2008 14:54:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/03/02/183319.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/183319.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/03/02/183319.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/183319.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/183319.html</trackback:ping><description><![CDATA[<span style="font-size: 10.5pt; font-family: 'Times New Roman';">Liferay Portal 4.0</span> 		<span style="font-size: 10.5pt; font-family: 宋体;">为我们提供了几种不同的页面布局，我们可以通过</span> 		<span style="font-size: 10.5pt; font-family: 'Times New Roman';">Add Content</span> 		<span style="font-size: 10.5pt; font-family: 宋体;">中的</span> 		<span style="font-size: 10.5pt; font-family: 'Times New Roman';">Template</span> 		<span style="font-size: 10.5pt; font-family: 宋体;">参数来指定不同的页面布局，但是，但我们利用</span> 		<span style="font-size: 10.5pt; font-family: 'Times New Roman';">CMS</span> 		<span style="font-size: 10.5pt; font-family: 宋体;">来定制文章内容的时候，仅有的几种页面布局并不能满足我们的需求，所以我们需要开发能够满足特定需求的页面布局。<br />
<span style="font-size: 10.5pt; font-family: 宋体;">&nbsp;&nbsp;&nbsp; 我们将开发一个具有下图风格的页面布局，该布局中我们指定了</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';">7</span><span style="font-size: 10.5pt; font-family: 宋体;">个区域来分别装配</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';">portlet</span><span style="font-size: 10.5pt; font-family: 宋体;">实现独特的页面风格。<br />
<span style="font-size: 10.5pt; font-family: 'Times New Roman';"><img src="http://www.javaeye.com/images/blogjava_net/coldtear/template/1.JPG" alt="1.JPG" border="0" height="488" width="601" /><br />
一、编写模板文件<br />
<span style="font-size: 10.5pt; font-family: 宋体;">&nbsp;&nbsp;&nbsp; 我们将该页面风格名称定义为</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';">1_2_3_2 Columns</span><span style="font-size: 10.5pt; font-family: 宋体;">，在</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';">Liferay/html/layouttpl/custom</span><span style="font-size: 10.5pt; font-family: 宋体;">目录下新建</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';">1_2_3_2_columns.tpl</span><span style="font-size: 10.5pt; font-family: 宋体;">文件，内容如下：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #000000;">&lt;</span><span style="color: #000000;">div&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">layout-content-outer-decoration</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: #000000;">&lt;</span><span style="color: #000000;">div&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">layout-content-inner-decoration</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">div&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">layout-content-container</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">table&nbsp;border</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">0</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;cellpadding</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">0</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;cellspacing</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">0</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;width</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">100%</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">tr</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">td&nbsp;colspan</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">3</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;valign</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">top</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$processor.processColumn(</span><span style="color: #000000;">"</span><span style="color: #000000;">column-1</span><span style="color: #000000;">"</span><span style="color: #000000;">)<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;"><span style="color: #000000;">td</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;"><span style="color: #000000;">tr</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">tr</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">td&nbsp;width</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">79%</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;valign</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">top</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">table&nbsp;border</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">0</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;cellpadding</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">0</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;cellspacing</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">0</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;width</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">100%</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">tr</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">td&nbsp;width</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">26%</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;valign</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">top</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$processor.processColumn(</span><span style="color: #000000;">"</span><span style="color: #000000;">column-2</span><span style="color: #000000;">"</span><span style="color: #000000;">)<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;"><span style="color: #000000;">td</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: #000000;">&lt;</span><span style="color: #000000;">td&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">layout-column-spacer</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;width</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">1%</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">div</span><span style="color: #000000;">&gt;&amp;</span><span style="color: #000000;">nbsp;</span><span style="color: #000000;"><span style="color: #000000;">div</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;"><span style="color: #000000;">td</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">td&nbsp;width</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">26%</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;valign</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">top</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$processor.processColumn(</span><span style="color: #000000;">"</span><span style="color: #000000;">column-3</span><span style="color: #000000;">"</span><span style="color: #000000;">)<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;"><span style="color: #000000;">td</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">td&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">layout-column-spacer</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;width</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">1%</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">div</span><span style="color: #000000;">&gt;&amp;</span><span style="color: #000000;">nbsp;</span><span style="color: #000000;"><span style="color: #000000;">div</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;"><span style="color: #000000;">td</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">td&nbsp;width</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">26%</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;valign</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">top</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$processor.processColumn(</span><span style="color: #000000;">"</span><span style="color: #000000;">column-4</span><span style="color: #000000;">"</span><span style="color: #000000;">)<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;"><span style="color: #000000;">td</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;"><span style="color: #000000;">tr</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;"><span style="color: #000000;">table</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;"><span style="color: #000000;">td</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">td&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">layout-column-spacer</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;width</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">1%</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">div</span><span style="color: #000000;">&gt;&amp;</span><span style="color: #000000;">nbsp;</span><span style="color: #000000;"><span style="color: #000000;">div</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;"><span style="color: #000000;">td</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">td&nbsp;width</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">20%</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;rowspan</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">2</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;valign</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">top</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$processor.processColumn(</span><span style="color: #000000;">"</span><span style="color: #000000;">column-5</span><span style="color: #000000;">"</span><span style="color: #000000;">)<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;"><span style="color: #000000;">td</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;"><span style="color: #000000;">tr</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">tr</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">td&nbsp;colspan</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">2</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">table&nbsp;border</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">0</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;cellpadding</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">0</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;cellspacing</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">0</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;width</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">100%</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">tr</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">td&nbsp;width</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">50%</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;valign</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">top</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$processor.processColumn(</span><span style="color: #000000;">"</span><span style="color: #000000;">column-6</span><span style="color: #000000;">"</span><span style="color: #000000;">)<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;"><span style="color: #000000;">td</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">td&nbsp;width</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">50%</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;valign</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">top</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$processor.processColumn(</span><span style="color: #000000;">"</span><span style="color: #000000;">column-7</span><span style="color: #000000;">"</span><span style="color: #000000;">)<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;"><span style="color: #000000;">td</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;"><span style="color: #000000;">tr</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;"><span style="color: #000000;">table</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;"><span style="color: #000000;">td</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;"><span style="color: #000000;">tr</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;"><span style="color: #000000;">table</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;"><span style="color: #000000;">div</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: #000000;"><span style="color: #000000;">div</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: #000000;"><span style="color: #000000;">div</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></div>
</span></span></span></span>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				<span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; 文件中前三行定义的</span> 				<span>
<div> 				<span style="font-family: 宋体;">和最后三行</span> 				</div>
</span> 				<span style="font-family: 宋体;">是固定的模板格式，从第四行开始就是我们需要定制的页面风格的</span> 				HTML 				<span style="font-family: 宋体;">格式，我们需要将输出</span> 				portlet 				<span style="font-family: 宋体;">区域的</span> 				HTML 				<span style="font-family: 宋体;">语句用</span> 				$processor.processColumn("column-1") 				<span style="font-family: 宋体;">来替换，&#8220;</span> 				column-1 				<span style="font-family: 宋体;">&#8221;是该区域的名称，并且每个区域的名字不能重复，这样系统在生成模板的时候会自动生成不同的区域来存放我们指定的</span> 				portlet 				<span style="font-family: 宋体;">。<br />
<br />
二、编写属性文件<br />
</span> 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				<span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; 我们需要在</span> 				 						<font face="Times New Roman">liferay-layout-templates.xml</font> 				 				<span style="font-family: 宋体;">文件中配置我们自定义的页面布局文件</span> 				 						<font face="Times New Roman">1_2_3_2_columns.tpl</font> 				 				<span style="font-family: 宋体;">，为了和系统自带的布局文件区分开，我们创建扩展文件</span> 				 						<font face="Times New Roman">liferay-layout-templates-ext.xml</font> 				 				<span style="font-family: 宋体;">，在该文件中指定我们的页面布局文件，当然也可以在</span> 				 						<font face="Times New Roman">liferay-layout-templates.xml</font> 				 				<span style="font-family: 宋体;">文件直接增加定义。</span> 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				&nbsp; 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				 						<font face="Times New Roman">liferay-layout-templates-ext.xml</font> 				 				<span style="font-family: 宋体;">：</span> 		</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"> 				<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 				<span style="color: #000000;"> 				<span style="color: #000000;">xml&nbsp;version</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">1.0</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">?&gt;</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 				</span> 				<span style="color: #000000;"> 				<span style="color: #000000;">DOCTYPE&nbsp;layout</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">templates&nbsp;PUBLIC&nbsp;</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">-//Liferay//DTD&nbsp;Layout&nbsp;Templates&nbsp;4.0.0//EN</span> 				<span style="color: #000000;">"</span> 				&nbsp; 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">http://www.liferay.com/dtd/liferay-layout-templates_4_0_0.dtd</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 				</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">layout</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">templates</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">custom</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">layout</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">template&nbsp;id</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">1_2_3_2_columns</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">&nbsp;name</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">1-2-3-2&nbsp;Columns</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">template</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">path</span> 				<span style="color: #000000;">&gt;/</span> 				<span style="color: #000000;">html</span> 				<span style="color: #000000;">/</span> 				<span style="color: #000000;">layouttpl</span> 				<span style="color: #000000;">/</span> 				<span style="color: #000000;">custom</span> 				<span style="color: #000000;">/</span> 				<span style="color: #000000;">1_2_3_2_columns.tpl</span> 				<span style="color: #000000;"> 				<span style="color: #000000;">template</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">path</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;"> 				<span style="color: #000000;">layout</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">template</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;"> 				<span style="color: #000000;">custom</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 				</span> 				<span style="color: #000000;"> 				<span style="color: #000000;">layout</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">templates</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 				</span> 		</span></span></span></span></span></span></div>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				<span style="font-family: 宋体;">参数</span> 				 						<font face="Times New Roman">id</font> 				 				<span style="font-family: 宋体;">定义该</span> 				 						<font face="Times New Roman">template</font> 				 				<span style="font-family: 宋体;">的</span> 				 						<font face="Times New Roman">ID</font> 				 				<span style="font-family: 宋体;">号，</span> 				 						<font face="Times New Roman">name</font> 				 				<span style="font-family: 宋体;">定义该</span> 				 						<font face="Times New Roman">template</font> 				 				<span style="font-family: 宋体;">在</span> 				 						<font face="Times New Roman">Add Content</font> 				 				<span style="font-family: 宋体;">中显示的名称，</span> 				 						<font face="Times New Roman">template-path</font> 				 				<span style="font-family: 宋体;">定义该</span> 				 						<font face="Times New Roman">template</font> 				 				<span style="font-family: 宋体;">的路径名。</span> 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				<br />
三、定制页面<br />
<span style="font-size: 10.5pt; font-family: 宋体;">&nbsp;&nbsp;&nbsp;&nbsp;定制好页面风格后，需要重新启动</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';">TOMCAT</span><span style="font-size: 10.5pt; font-family: 宋体;">，登陆系统，进入</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';">GUEST</span><span style="font-size: 10.5pt; font-family: 宋体;">频道，点击</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';">Add Content </span><span style="font-size: 10.5pt; font-family: 宋体;">，在</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';">Template</span><span style="font-size: 10.5pt; font-family: 宋体;">中将会显示我们自定义的页面布局名称</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';">1-2-3</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';">-2 Columns</span><span style="font-size: 10.5pt; font-family: 宋体;">，选择该</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';">Template</span><span style="font-size: 10.5pt; font-family: 宋体;">，然后在页面中添加</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';">Journal Content</span><span style="font-size: 10.5pt; font-family: 宋体;">，按照我们自定义的布局将</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';">portlet</span><span style="font-size: 10.5pt; font-family: 宋体;">拖拉到合适的位置，再为每个</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';">Journal Content</span><span style="font-size: 10.5pt; font-family: 宋体;">指定</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';">Article</span><span style="font-size: 10.5pt; font-family: 宋体;">，最后就完成了各种风格页面的定制过程。使用这个的方法，我们可以定制各种满足不同需求的页面。</span></p>
<img src ="http://www.blogjava.net/libin2722/aggbug/183319.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-03-02 22:54 <a href="http://www.blogjava.net/libin2722/archive/2008/03/02/183319.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Liferay Portal学习笔记（二）：使用CMS</title><link>http://www.blogjava.net/libin2722/archive/2008/03/02/183318.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Sun, 02 Mar 2008 14:49:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/03/02/183318.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/183318.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/03/02/183318.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/183318.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/183318.html</trackback:ping><description><![CDATA[<span style="font-size: 10.5pt; font-family: 'Times New Roman';">Liferay Portal</span> 		<span style="font-size: 10.5pt; font-family: 宋体;">的</span> 		<span style="font-size: 10.5pt; font-family: 'Times New Roman';">CMS（Content Manage System）</span> 		<span style="font-size: 10.5pt; font-family: 宋体;">提供了两大功能：文档管理和文章发布。文档管理包括文档库和图片集两个</span> 		<span style="font-size: 10.5pt; font-family: 'Times New Roman';">portlets</span> 		<span style="font-size: 10.5pt; font-family: 宋体;">，能够提供对</span> 		<span style="font-size: 10.5pt; font-family: 'Times New Roman';">Microsoft Office</span> 		<span style="font-size: 10.5pt; font-family: 宋体;">文档、</span> 		<span style="font-size: 10.5pt; font-family: 'Times New Roman';">PDFs</span> 		<span style="font-size: 10.5pt; font-family: 宋体;">、文本文件和图片的管理；文章发布功能依靠</span> 		<span style="font-size: 10.5pt; font-family: 'Times New Roman';">Liferay Portal</span> 		<span style="font-size: 10.5pt; font-family: 宋体;">中的</span> 		<span style="font-size: 10.5pt; font-family: 'Times New Roman';">Journal portlet</span> 		<span style="font-size: 10.5pt; font-family: 宋体;">完成，它的特性是能够将数据（</span> 		<span style="font-size: 10.5pt; font-family: 'Times New Roman';">data entry</span> 		<span style="font-size: 10.5pt; font-family: 宋体;">）和版面设计（</span> 		<span style="font-size: 10.5pt; font-family: 'Times New Roman';">Layout Design</span> 		<span style="font-size: 10.5pt; font-family: 宋体;">）很轻易的分开，这就使得</span> 		<span style="font-size: 10.5pt; font-family: 'Times New Roman';">content</span> 		<span style="font-size: 10.5pt; font-family: 宋体;">能够复合一致的&#8220;</span> 		<span style="font-size: 10.5pt; font-family: 'Times New Roman';">look and feel</span> 		<span style="font-size: 10.5pt; font-family: 宋体;">&#8221;，另外，</span> 		<span style="font-size: 10.5pt; font-family: 'Times New Roman';">Journal portlet</span> 		<span style="font-size: 10.5pt; font-family: 宋体;">提供了</span> 		<span style="font-size: 10.5pt; font-family: 'Times New Roman';">content</span> 		<span style="font-size: 10.5pt; font-family: 宋体;">的版本跟踪和发布流程的功能。<br />
<span style="font-size: 12pt; font-family: 'Times New Roman';"><font face="宋体">&nbsp;&nbsp;&nbsp;
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><font face="Times New Roman">Liferay Portal</font><span style="font-family: 宋体;">的</span><font face="Times New Roman">CMS</font><span style="font-family: 宋体;">功能是通过</span><font face="Times New Roman">Journal Portlet</font><span style="font-family: 宋体;">实现的，在介绍怎样使用</span><font face="Times New Roman">Journal Portlet</font><span style="font-family: 宋体;">之前，有必要理解</span><font face="Times New Roman">structures</font><span style="font-family: 宋体;">、</span><font face="Times New Roman">templates</font><span style="font-family: 宋体;">和</span><font face="Times New Roman">articles</font><span style="font-family: 宋体;">的概念，它们是</span><font face="Times New Roman">Journal portlet</font><span style="font-family: 宋体;">功能的基础。</span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><font face="Times New Roman">Structures</font></strong><span style="font-family: 宋体;">：定于了</span><font face="Times New Roman">content</font><span style="font-family: 宋体;">的类型和数量，</span><font face="Times New Roman">content</font><span style="font-family: 宋体;">的类型包括</span><font face="Times New Roman">text</font><span style="font-family: 宋体;">、</span><font face="Times New Roman">text area</font><span style="font-family: 宋体;">、</span><font face="Times New Roman">images</font><span style="font-family: 宋体;">、</span><font face="Times New Roman">selection lists</font><span style="font-family: 宋体;">等</span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><font face="Times New Roman">Templates</font></strong><span style="font-family: 宋体;">：确定</span><font face="Times New Roman">content</font><span style="font-family: 宋体;">怎样排列或摆放</span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><font face="Times New Roman">Articles</font></strong><span style="font-family: 宋体;">：确定每个</span><font face="Times New Roman">content</font><span style="font-family: 宋体;">包含的实际的</span><font face="Times New Roman">text</font><span style="font-family: 宋体;">和</span><font face="Times New Roman">images</font></p>
<span style="font-size: 10.5pt; font-family: 宋体;">&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 我们以下图为例定义一个</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';">content</span><span style="font-size: 10.5pt; font-family: 宋体;">，分为三个步骤：</span></font><br />
<img alt="1.JPG" src="http://www.javaeye.com/images/blogjava_net/coldtear/CMS/1.JPG" border="0" height="535" width="642" /><br />
<p style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">第一步、创建</span>Structure<span style="font-family: 宋体;">，包含一下元素：一个</span>text<span style="font-family: 宋体;">元素名为&#8220;</span>headline<span style="font-family: 宋体;">&#8221;（对应图片</span>1<span style="font-family: 宋体;">区域）、三个</span>text area<span style="font-family: 宋体;">元素为名称分别为&#8220;</span>body-text<span style="font-family: 宋体;">&#8221;（对应</span>4<span style="font-family: 宋体;">区域）&#8220;</span>caption-1<span style="font-family: 宋体;">&#8221;（对应</span>2<span style="font-family: 宋体;">区域）&#8220;</span>caption-2<span style="font-family: 宋体;">&#8221;（对应</span>6<span style="font-family: 宋体;">区域）、两个</span>image<span style="font-family: 宋体;">元素名称分别为&#8220;</span>image-1<span style="font-family: 宋体;">&#8221;（对应</span>3<span style="font-family: 宋体;">区域）和&#8220;</span>image-2<span style="font-family: 宋体;">&#8221;（对应</span>5<span style="font-family: 宋体;">区域）</span></p>
<span style="font-size: 10.5pt; font-family: 宋体;">添加完这些元素后的界面如下：<br />
<img alt="2.JPG" src="http://www.javaeye.com/images/blogjava_net/coldtear/CMS/2.JPG" border="0" height="251" width="760" /><br />
<p style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">点击</span><font face="Times New Roman">Launch Editor</font><span style="font-family: 宋体;">按钮，可以看到</span><font face="Times New Roman">XML</font><span style="font-family: 宋体;">定义，也可以在此增删或修改元素及类型，内容如下：<br />
</span></p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000;">&lt;</span><span style="color: #000000;">root</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">dynamic</span><span style="color: #000000;">-</span><span style="color: #000000;">element&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">'</span><span style="color: #000000;">headline</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;type</span><span style="color: #000000;">=</span><span style="color: #000000;">'</span><span style="color: #000000;">text</span><span style="color: #000000;">'</span><span style="color: #000000;">&gt;<span style="color: #000000;">dynamic</span><span style="color: #000000;">-</span><span style="color: #000000;">element</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">dynamic</span><span style="color: #000000;">-</span><span style="color: #000000;">element&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">'</span><span style="color: #000000;">body-text</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;type</span><span style="color: #000000;">=</span><span style="color: #000000;">'</span><span style="color: #000000;">text_area</span><span style="color: #000000;">'</span><span style="color: #000000;">&gt;<span style="color: #000000;">dynamic</span><span style="color: #000000;">-</span><span style="color: #000000;">element</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">dynamic</span><span style="color: #000000;">-</span><span style="color: #000000;">element&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">'</span><span style="color: #000000;">caption-1</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;type</span><span style="color: #000000;">=</span><span style="color: #000000;">'</span><span style="color: #000000;">text_area</span><span style="color: #000000;">'</span><span style="color: #000000;">&gt;<span style="color: #000000;">dynamic</span><span style="color: #000000;">-</span><span style="color: #000000;">element</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">dynamic</span><span style="color: #000000;">-</span><span style="color: #000000;">element&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">'</span><span style="color: #000000;">caption-2</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;type</span><span style="color: #000000;">=</span><span style="color: #000000;">'</span><span style="color: #000000;">text_area</span><span style="color: #000000;">'</span><span style="color: #000000;">&gt;<span style="color: #000000;">dynamic</span><span style="color: #000000;">-</span><span style="color: #000000;">element</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">dynamic</span><span style="color: #000000;">-</span><span style="color: #000000;">element&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">'</span><span style="color: #000000;">image-1</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;type</span><span style="color: #000000;">=</span><span style="color: #000000;">'</span><span style="color: #000000;">image</span><span style="color: #000000;">'</span><span style="color: #000000;">&gt;<span style="color: #000000;">dynamic</span><span style="color: #000000;">-</span><span style="color: #000000;">element</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">dynamic</span><span style="color: #000000;">-</span><span style="color: #000000;">element&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">'</span><span style="color: #000000;">image-2</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;type</span><span style="color: #000000;">=</span><span style="color: #000000;">'</span><span style="color: #000000;">image</span><span style="color: #000000;">'</span><span style="color: #000000;">&gt;<span style="color: #000000;">dynamic</span><span style="color: #000000;">-</span><span style="color: #000000;">element</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000;"><span style="color: #000000;">root</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" /></span></span></span></span></span></span></span></span></div>
</span></span></span>
<p style="margin: 0cm 0cm 0pt 31.5pt; text-indent: -31.5pt;"> 				<span style="font-family: 宋体;">第二步、创建</span> 				Template 				<span style="font-family: 宋体;">，添入</span> 				ID 				<span style="font-family: 宋体;">、</span> 				Name 				<span style="font-family: 宋体;">、</span> 				Description 				<span style="font-family: 宋体;">信息后，在</span> 				Structure 				<span style="font-family: 宋体;">一栏选择上一步创建的</span> 				Structure 				<span style="font-family: 宋体;">（这里为</span> 				test 				<span style="font-family: 宋体;">）<br />
<img title="点击查看原始大小图片" alt="3.JPG" src="http://www.javaeye.com/images/blogjava_net/coldtear/CMS/3.JPG" border="0" height="429" width="760" /><br />
</span> 		</p>
<p style="margin: 0cm 0cm 0pt;"> 				<span style="font-family: 宋体;">然后点击</span> 				 						<font face="Times New Roman">Launch Editor</font> 				 				<span style="font-family: 宋体;">按钮，打开</span> 				 						<font face="Times New Roman">Template</font> 				 				<span style="font-family: 宋体;">编辑窗口，按照所需要的格式定义</span> 				 						<font face="Times New Roman">Template</font> 				 				<span style="font-family: 宋体;">，如下：<br />
</span> 		</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"> 				<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" /> 				<span style="color: #000000;"> 				<span style="color: #000000;">xml&nbsp;version</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">1.0</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">?&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" /> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" /> 				</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">xsl:stylesheet&nbsp;xmlns:xsl</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">http://www.w3.org/1999/XSL/Transform</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">&nbsp;version</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">1.0</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;">&nbsp;&nbsp;<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">xsl:output&nbsp;method</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">html</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">&nbsp;omit</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">xml</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">declaration</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">yes</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">/&gt;</span> 				<span style="color: #000000;">&nbsp;&nbsp;<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">xsl:template&nbsp;match</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">/</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;">&nbsp;<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">table&nbsp;cellpadding</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">0</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">&nbsp;cellspacing</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">0</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">&nbsp;border</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">0</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">&nbsp;width</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">100%</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;">&nbsp;<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">tr</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;">&nbsp;<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">td&nbsp;colspan</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">2</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">xsl:value</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">of<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;disable</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">output</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">escaping</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">yes</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">&nbsp;select</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">root/dynamic-element[@name='headline']/dynamic-content</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">/&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;"> 				<span style="color: #000000;">td</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;"> 				<span style="color: #000000;">tr</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">tr</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">td</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">img</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;">&nbsp;<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">xsl:attribute&nbsp;name</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">src</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;">&nbsp;<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">xsl:value</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">of&nbsp;<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />disable</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">output</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">escaping</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">yes</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">&nbsp;select</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">root/dynamic-element[@name='image-1']/dynamic-content</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">/&gt;</span> 				<span style="color: #000000;">&nbsp;<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;"> 				<span style="color: #000000;">xsl:attribute</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;">&nbsp;<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;"> 				<span style="color: #000000;">img</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;"> 				<span style="color: #000000;">td</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">td</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">xsl:value</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">of&nbsp;<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />disable</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">output</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">escaping</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">yes</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">&nbsp;select</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">root/dynamic-element[@name='caption-1']/dynamic-content</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">/&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;"> 				<span style="color: #000000;">td</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;"> 				<span style="color: #000000;">tr</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">tr</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">td&nbsp;colspan</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">2</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">xsl:value</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">of&nbsp;<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />disable</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">output</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">escaping</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">yes</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">&nbsp;select</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">root/dynamic-element[@name='body-text']/dynamic-content</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">/&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;"> 				<span style="color: #000000;">td</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;"> 				<span style="color: #000000;">tr</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">tr</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">td</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">xsl:value</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">of&nbsp;<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />disable</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">output</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">escaping</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">yes</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">&nbsp;select</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">root/dynamic-element[@name='caption-2']/dynamic-content</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">/&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;"> 				<span style="color: #000000;">td</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">td</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">img</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;">&nbsp;<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">xsl:attribute&nbsp;name</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">src</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;">&nbsp;<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">xsl:value</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">of&nbsp;<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />disable</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">output</span> 				<span style="color: #000000;">-</span> 				<span style="color: #000000;">escaping</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">yes</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">&nbsp;select</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">root/dynamic-element[@name='image-2']/dynamic-content</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">/&gt;</span> 				<span style="color: #000000;">&nbsp;<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;"> 				<span style="color: #000000;">xsl:attribute</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;">&nbsp;<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;"> 				<span style="color: #000000;">img</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;"> 				<span style="color: #000000;">td</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;"> 				<span style="color: #000000;">tr</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;"> 				<span style="color: #000000;">table</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;">&nbsp;<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span> 				<span style="color: #000000;"> 				<span style="color: #000000;">xsl:template</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;">&nbsp;<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" /></span> 				<span style="color: #000000;"> 				<span style="color: #000000;">xsl:stylesheet</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img alt="" src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" align="top" /> 				</span> 		</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></div>
<p style="margin: 0cm 0cm 0pt;"> 				<span style="font-family: 宋体;">下面对该文件进行说明：</span> 		</p>
<p style="margin: 0cm 0cm 0pt;"> 				 						<font face="Times New Roman">1</font> 				 				<span style="font-family: 宋体;">、这里的</span> 				 						<font face="Times New Roman">@name=&#8217;</font> 				 				<span style="font-family: 宋体;">名称</span> 				 						<font face="Times New Roman">&#8217;</font> 				 				<span style="font-family: 宋体;">必须要和第一步中创建</span> 				 						<font face="Times New Roman">Structure</font> 				 				<span style="font-family: 宋体;">中的元素名称一致，页面格式根据需求使用</span> 				 						<font face="Times New Roman">HTML</font> 				 				<span style="font-family: 宋体;">语言定义即可。</span> 		</p>
<p style="margin: 0cm 0cm 0pt 31.5pt; text-indent: -31.5pt;"> 				 						<font face="Times New Roman">2</font> 				 				<span style="font-family: 宋体;">、对</span> 				 						<font face="Times New Roman">text</font> 				 				<span style="font-family: 宋体;">、</span> 				 						<font face="Times New Roman">text area</font> 				 				<span style="font-family: 宋体;">类型的元素输出时的格式如下：</span> 		</p>
<p style="margin: 0cm 0cm 0pt;"> 				 						<font face="Times New Roman">disable-output-escaping="yes" select="root/dynamic-element[@name='caption-2']/dynamic-content"/&gt;</font> 				 		</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;"> 				 						 								<font face="Times New Roman">1、<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"><font size="3">&nbsp; </font></span></font> 						 				 				<span style="font-family: 宋体;">对</span> 				 						<font face="Times New Roman">image</font> 				 				<span style="font-family: 宋体;">类型的元素输出时的格式如下：</span> 		</p>
<p style="margin: 0cm 0cm 0pt;"> 				 						<font face="Times New Roman"><img alt="" /> </font> 				 		</p>
<p style="margin: 0cm 0cm 0pt;"> 				 						<font face="Times New Roman"> 								&nbsp; </font> 				 		</p>
<p style="margin: 0cm 0cm 0pt;"> 				 						<font face="Times New Roman"> 								&nbsp;&nbsp;&nbsp; </font> 				 		</p>
<p style="margin: 0cm 0cm 0pt 31.5pt;"> 				 						<font face="Times New Roman">disable-output-escaping="yes" select="root/dynamic-element[@name='image-2']/dynamic-content"/&gt; </font> 				 		</p>
<p style="margin: 0cm 0cm 0pt;"> 				 						<font face="Times New Roman"> 								&nbsp; </font> 				 		</p>
<span style="font-size: 10.5pt; font-family: 宋体;">第三步、创建</span> 		<span style="font-size: 10.5pt; font-family: 'Times New Roman';">Article</span> 		<span style="font-size: 10.5pt; font-family: 宋体;">，添写基本信息后，在</span> 		<span style="font-size: 10.5pt; font-family: 'Times New Roman';">Structure</span> 		<span style="font-size: 10.5pt; font-family: 宋体;">一栏选择</span> 		<span style="font-size: 10.5pt; font-family: 'Times New Roman';">test</span> 		<span style="font-size: 10.5pt; font-family: 宋体;">，对应的</span> 		<span style="font-size: 10.5pt; font-family: 'Times New Roman';">Template</span> 		<span style="font-size: 10.5pt; font-family: 宋体;">一栏也选择</span> 		<span style="font-size: 10.5pt; font-family: 'Times New Roman';">test</span> 		<span style="font-size: 10.5pt; font-family: 宋体;">即可，然后在对应的元素域里添入合适的文本或者图片，点击预览即可以看到如下界面，确定无问题后，点击保存或者保存并发布按钮即可完成</span> 		<span style="font-size: 10.5pt; font-family: 'Times New Roman';">content</span> 		<span style="font-size: 10.5pt; font-family: 宋体;">的定制。<br />
<img alt="4.JPG" src="http://www.javaeye.com/images/blogjava_net/coldtear/CMS/4.JPG" border="0" height="635" width="499" /><br />
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-family: 宋体;">通过以上三个步骤，我们就实现了定制</span><font face="Times New Roman">content</font><span style="font-family: 宋体;">的功能。使用</span><font face="Times New Roman">Journal Portlet</font><span style="font-family: 宋体;">，我们可以定制任何不同风格的</span><font face="Times New Roman">content</font><span style="font-family: 宋体;">来展示必要的信息。</span></p>
</span>
<img src ="http://www.blogjava.net/libin2722/aggbug/183318.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-03-02 22:49 <a href="http://www.blogjava.net/libin2722/archive/2008/03/02/183318.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Liferay Portal学习笔记（一）：安装</title><link>http://www.blogjava.net/libin2722/archive/2008/03/02/183317.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Sun, 02 Mar 2008 14:48:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/03/02/183317.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/183317.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/03/02/183317.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/183317.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/183317.html</trackback:ping><description><![CDATA[<h4 style="margin: 14pt 0cm 14.5pt;"> 				<font color="#000000"> 						 								<font face="Arial">一、</font> 						 						<span style="font-family: 黑体;"> 								<font style="background-color: #ffffff;">简单安装</font> 						</span> 				</font> 		</h4>
<h6><font style="background-color: #ffffff;"> 						<span style="font-size: 12pt; line-height: 156%; font-family: 宋体;"> 								<font face="Times New Roman">1）</font>下载并安装</span> 						<span style="font-size: 12pt; line-height: 156%;">JDK1.5</span></font></h6>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;" class="MsoNormal"> 				 						1、&nbsp; 				 				<span style="font-family: 宋体;">下载并安装</span> 				Windows Platform J2SE(TM) Development Kit 5.0 Update 				<span style="font-family: 宋体;">，下载网址</span> 				 						<a href="http://java.sun.com/j2se/1.5.0/download.jsp">http://java.sun.com/j2se/1.5.0/download.jsp</a> 				 		</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;" class="MsoNormal"> 				 						2、&nbsp; 				 				<span style="font-family: 宋体;">在控制面板</span> 				--&gt; 				<span style="font-family: 宋体;">系统</span> 				--&gt; 				<span style="font-family: 宋体;">高级选项</span> 				--&gt; 				<span style="font-family: 宋体;">环境变量，新增一个用户变量</span> 				JAVA_HOME 				<span style="font-family: 宋体;">并指向</span> 				JDK 				<span style="font-family: 宋体;">的安装目录</span> 		</p>
<h6> 						<span style="font-size: 12pt; line-height: 156%;">2）</span> 				&nbsp; 				<span style="font-size: 12pt; line-height: 156%; font-family: 宋体;">下载并安装</span> 				<span style="font-size: 12pt; line-height: 156%;">Liferay Portal</span></h6>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt;" class="MsoNormal"> 				 						1.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  				</span> 				<span style="font-family: 宋体;">下载并安装</span> 				Liferay Portal Professional 4.0.0 (Bundled with Tomcat and JDK 5.0), 				<span style="font-family: 宋体;">下载网址</span> 				 						<a href="http://www.liferay.com/web/guest/download">http://www.liferay.com/web/guest/download</a> 				 		</p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt;" class="MsoNormal"> 				 						2.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  				</span> 				<span style="font-family: 宋体;">解压缩到一个目录，并确保硬盘上有足够的空间，我们称这个目录为</span> 				TOMCAT_HOME 		</p>
<h6> 						<span style="font-size: 12pt; line-height: 156%;">3）</span> 				&nbsp; 				<span style="font-size: 12pt; line-height: 156%; font-family: 宋体;">启动</span> 				<span style="font-size: 12pt; line-height: 156%;">TOMCAT</span></h6>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormalIndent"> 				<span style="font-family: 宋体;">到</span> 				TOMCAT/bin 				<span style="font-family: 宋体;">目录下，运行</span> 				startup.bat 				<span style="font-family: 宋体;">。</span> 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormalIndent"> 				<span style="font-family: 宋体;">你的</span> 				Apache Tomcat server 				<span style="font-family: 宋体;">能够编译并运行</span> 				Liferay Portal 				<span style="font-family: 宋体;">。默认情况下，</span> 				portal 				<span style="font-family: 宋体;">使用自带的</span> 				HSQL 				<span style="font-family: 宋体;">数据库。在浏览器中输入</span> 				http://localhost:8080 				<span style="font-family: 宋体;">，将会看见</span> 				portal 				<span style="font-family: 宋体;">首页。</span> 		</p>
<h4 style="margin: 14pt 0cm 14.5pt;"> 				 						<font face="Arial">二、&nbsp;</font> 				 				<span style="font-family: 黑体;">专业安装</span> 		</h4>
<h6> 						<span style="font-size: 12pt; line-height: 156%;">1）</span> 				&nbsp; 				<span style="font-size: 12pt; line-height: 156%; font-family: 宋体;">下载并安装</span> 				<span style="font-size: 12pt; line-height: 156%;">JDK1.5</span></h6>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;" class="MsoNormal"> 				 						1、&nbsp; 				 				<span style="font-family: 宋体;">下载并安装</span> 				Windows Platform J2SE(TM) Development Kit 5.0 Update 				<span style="font-family: 宋体;">，下载网址</span> 				 						<a href="http://java.sun.com/j2se/1.5.0/download.jsp">http://java.sun.com/j2se/1.5.0/download.jsp</a> 				 		</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;" class="MsoNormal"> 				 						2、&nbsp; 				 				<span style="font-family: 宋体;">在控制面板</span> 				--&gt; 				<span style="font-family: 宋体;">系统</span> 				--&gt; 				<span style="font-family: 宋体;">高级选项</span> 				--&gt; 				<span style="font-family: 宋体;">环境变量，新增一个用户变量</span> 				JAVA_HOME 				<span style="font-family: 宋体;">并指向</span> 				JDK 				<span style="font-family: 宋体;">的安装目录</span> 		</p>
<h6> 						<span style="font-size: 12pt; line-height: 156%;">2）</span> 				&nbsp; 				<span style="font-size: 12pt; line-height: 156%; font-family: 宋体;">下载并安装</span> 				<span style="font-size: 12pt; line-height: 156%;">TOMCAT</span></h6>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;" class="MsoNormal"> 				 						1、&nbsp; 				 				<span style="font-family: 宋体;">下载</span> 				apache-tomcat-5.5.17.zip 				<span style="font-family: 宋体;">并解压缩到一个目录，我们称这个目录为</span> 				TOMCAT 				<span style="font-family: 宋体;">。</span> 		</p>
<h6> 						<span style="font-size: 12pt; line-height: 156%;">3）</span> 				<span style="font-size: 12pt; line-height: 156%; font-family: 宋体;">下载并安装</span> 				<span style="font-size: 12pt; line-height: 156%;">Liferay Portal </span></h6>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;" class="MsoNormal"> 				 						1、&nbsp; 				 				<span style="font-family: 宋体;">下载</span> 				liferay-portal-4.0.0.war, 				<span style="font-family: 宋体;">下载网址</span> 				 						<a href="http://www.liferay.com/web/guest/download">http://www.liferay.com/web/guest/download</a> 				 		</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;" class="MsoNormal"> 				 						2、&nbsp; 				 				<span style="font-family: 宋体;">解压缩</span> 				liferay-portal-4.0.0.war 				<span style="font-family: 宋体;">到</span> 				TOMCAT 				<span style="font-family: 宋体;">目录下并改名为</span> 				liferay 				<span style="font-family: 宋体;">，然后将</span> 				liferay/WEB-INF/lib 				<span style="font-family: 宋体;">下除</span> 				util-taglib.jar 				<span style="font-family: 宋体;">外的其他</span> 				jar 				<span style="font-family: 宋体;">包剪切到</span> 				TOMCAT/common/lib/ext 				<span style="font-family: 宋体;">下</span> 		</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;" class="MsoNormal"> 				 						3、&nbsp; 				 				<span style="font-family: 宋体;">在</span> 				TOMCAT/conf/Catalina/localhost 				<span style="font-family: 宋体;">目录下，删除该目录下已有的文件，然后新建</span> 				ROOT.xml 				<span style="font-family: 宋体;">文件（这里的</span> 				ROOT 				<span style="font-family: 宋体;">必须是大写）</span> 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				ROOT.xml 				<span style="font-family: 宋体;">：</span> 				 		</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"> 				<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">Context&nbsp;path</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">""</span> 				<span style="color: #000000;">&nbsp;docBase</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">../liferay</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">&nbsp;debug</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">0</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">&nbsp;reloadable</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">true</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">&nbsp;crossContext</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">true</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">Resource<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">jdbc/LiferayPool</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;auth</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">Container</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">javax.sql.DataSource</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;driverClassName</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">org.hsqldb.jdbcDriver</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">jdbc:hsqldb:test</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;username</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">sa</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">""</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxActive</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">20</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">/&gt;</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">Resource<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">mail/MailSession</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;auth</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">Container</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">javax.mail.Session</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mail.transport.protocol</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">smtp</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mail.smtp.host</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">localhost</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">/&gt;</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">&lt;</span> 				<span style="color: #000000;">Realm&nbsp;<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;className</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">org.apache.catalina.realm.JAASRealm</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;appName</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">PortalRealm</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userClassNames</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">com.liferay.portal.security.jaas.PortalPrincipal</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;roleClassNames</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">com.liferay.portal.security.jaas.PortalRole</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debug</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">99</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;useContextClassLoader</span> 				<span style="color: #000000;">=</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;">false</span> 				<span style="color: #000000;">"</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 				<span style="color: #000000;">/&gt;</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 				</span> 				<span style="color: #000000;"> 				<span style="color: #000000;">Context</span> 				<span style="color: #000000;">&gt;</span> 				<span style="color: #000000;"> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 						<br />
<img src="http://www.javaeye.com/Images/OutliningIndicators/None.gif" alt="" align="top" /> 				</span> 		</span></div>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal">4、&nbsp;<span style="font-family: 宋体;">在</span>TOMCAT/conf<span style="font-family: 宋体;">目录下，新建</span>jaas.config<span style="font-family: 宋体;">文件</span></p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				jaas.config 				<span style="font-family: 宋体;">：</span> 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				PortalRealm { 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				 						&nbsp;com.liferay.portal.security.jaas.PortalLoginModule required; 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				}; 		</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;" class="MsoNormal"> 				 						5、&nbsp; 				 				<span style="font-family: 宋体;">修改</span> 				TOMCAT/conf 				<span style="font-family: 宋体;">目录下</span> 				catalina.properties 				<span style="font-family: 宋体;">文件中的下面一段：</span> 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				common.loader=${catalina.home}/common/classes,${catalina.home}/common/i18n/*.jar,${catalina.home}/common/endorsed/*.jar,${catalina.home}/common/lib/*.jar,${catalina.home}/common/lib/ext/*.jar 		</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;" class="MsoNormal"> 				 						6、&nbsp; 				 				<span style="font-family: 宋体;">修改</span> 				TOMCAT/bin 				<span style="font-family: 宋体;">目录下</span> 				catalina.bat 				<span style="font-family: 宋体;">文件，增加下面内容：</span> 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				rem ----- Execute The Requested Command --------------------------------------- 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				&nbsp; 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				set JAVA_OPTS=-Xms128m -Xmx512m -Dfile.encoding=UTF8 -Duser.timezone=GMT+08 -Djava.security.auth.login.config=%CATALINA_HOME%/conf/jaas.config 		</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;" class="MsoNormal"> 				 						7、&nbsp; 				 				<span style="font-family: 宋体;">到</span> 				TOMCAT/bin 				<span style="font-family: 宋体;">目录下，运行</span> 				startup.bat 				<span style="font-family: 宋体;">。在浏览器中输入</span> 				http://localhost:8080 				<span style="font-family: 宋体;">，将会看见</span> 				portal 				<span style="font-family: 宋体;">首页。</span> 		</p>
<h4 style="margin: 14pt 0cm 14.5pt;"> 				 						<font face="Arial">三、&nbsp;</font> 				 				<span style="font-family: 黑体;">连接数据库</span> 		</h4>
<h6> 						<span style="font-size: 12pt; line-height: 156%;">1）</span> 				<span style="font-size: 12pt; line-height: 156%; font-family: 宋体;">连接</span> 				<span style="font-size: 12pt; line-height: 156%;">HSQLDB</span></h6>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt;" class="MsoNormal"> 				<span style="font-family: 宋体;">修改</span> 				TOMCAT/conf/Catalina/localhost/ROOT.xml 				<span style="font-family: 宋体;">文件并将</span> 				SQL SERVER 				<span style="font-family: 宋体;">驱动包</span> 				hsql.jar 				<span style="font-family: 宋体;">拷贝到</span> 				TOMCAT/common/lib/ext 				<span style="font-family: 宋体;">下</span> 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				 						&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				 						&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name="jdbc/LiferayPool" 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				 						&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; auth="Container" 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				 						&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="javax.sql.DataSource" 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				 						&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; driverClassName="org.hsqldb.jdbcDriver" 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				 						&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url="jdbc:hsqldb:test" 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				 						&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; username="sa" 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				 						&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password="" 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				 						&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxActive="20" 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				 						&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&gt; 		</p>
<h6> 						<span style="font-size: 12pt; line-height: 156%;">2）</span> 				&nbsp; 				<span style="font-size: 12pt; line-height: 156%; font-family: 宋体;">连接</span> 				<span style="font-size: 12pt; line-height: 156%;">SQL SERVER</span></h6>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt;" class="MsoNormal"> 				<span style="font-family: 宋体;">修改</span> 				TOMCAT/conf/Catalina/localhost/ROOT.xml 				<span style="font-family: 宋体;">文件并将</span> 				SQL SERVER 				<span style="font-family: 宋体;">驱动包</span> 				jtds-1.2.jar 				<span style="font-family: 宋体;">拷贝到</span> 				TOMCAT/common/lib/ext 				<span style="font-family: 宋体;">下</span> 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				 						&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				 						&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name="jdbc/LiferayPool" 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				 						&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; auth="Container" 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				 						&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="javax.sql.DataSource" 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				 						&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; driverClassName="net.sourceforge.jtds.jdbc.Driver" 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				 						&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url="jdbc:jtds:sqlserver://localhost:1433;DatabaseName=lportal4" 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				 						&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; username="sa" 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				 						&nbsp;&nbsp;&nbsp;  						&nbsp;&nbsp;&nbsp;&nbsp;password="sa" 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				 						&nbsp;&nbsp;&nbsp;  						&nbsp;&nbsp;&nbsp;&nbsp;maxActive="100" 		</p>
<p style="margin: 0cm 0cm 0pt;" class="MsoNormal"> 				 						&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&gt; 		</p>
<img src ="http://www.blogjava.net/libin2722/aggbug/183317.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-03-02 22:48 <a href="http://www.blogjava.net/libin2722/archive/2008/03/02/183317.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Liferay Portal二次开发指南</title><link>http://www.blogjava.net/libin2722/archive/2008/03/02/183216.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Sun, 02 Mar 2008 02:49:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/03/02/183216.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/183216.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/03/02/183216.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/183216.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/183216.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: OpenDoc版权说明：本文档版权归原作者所有。在免费、且无任何附加条件的前提下，可在网络媒体中自由传播。如需部分或者全文引用，请事先征求作者意见。如果本文对您有些许帮助，表达谢意的最好方式，是将您发现的问题和文档改进意见及时反馈给作者。当然，倘若有时间和能力，能为技术群体无偿贡献自己的所学为最好的回馈。序随着信息化建设的深入，Portal 门户已经成为新型办公环境...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/archive/2008/03/02/183216.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/183216.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-03-02 10:49 <a href="http://www.blogjava.net/libin2722/archive/2008/03/02/183216.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat 5.5.2 下部署 Liferay 4.4.1</title><link>http://www.blogjava.net/libin2722/archive/2008/02/24/181745.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Sun, 24 Feb 2008 04:08:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/02/24/181745.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/181745.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/02/24/181745.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/181745.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/181745.html</trackback:ping><description><![CDATA[今天终于把liferay发布起来了，下面是发布步骤，希望能帮助和我一样liferay的初学者：<br />
<p>Tomcat 5.5.2 <span style="font-family: 宋体;">下部署</span> Liferay 4.4.1</p>
<p style="margin-left: 18pt; text-indent: -18pt;">1、&nbsp;<span style="font-family: 宋体;">下载</span>Tomcat 5.5.2</p>
<p style="margin-left: 18pt; text-indent: -18pt;">2、&nbsp;<span style="font-family: 宋体;">下载</span><span>liferay-portal-tomcat-5.5-jdk5-4.4.1.zip
</span><span style="font-family: 宋体;">在</span><a href="http://www.sourceforge.org/">www.sourceforge.org</a> <span style="font-family: 宋体;">上找</span></p>
<p style="margin-left: 18pt; text-indent: -18pt;">3、&nbsp;<span style="font-family: 宋体;">解压</span></p>
<p style="margin-left: 18pt; text-indent: -18pt;">4、&nbsp;<span style="font-family: 宋体;">修改</span>%tomcat_home%"bin"catalina.bat</p>
<p style="margin-left: 18pt;"><span style="font-family: 宋体;">在</span><span>rem ----- Execute The Requested Command
---------------------------------------</span><span style="font-family: 宋体;">下面加入：</span></p>
<p style="margin-left: 18pt;"><span>set
JAVA_OPTS=%JAVA_OPTS% -Xms128m
-Xmx1024m
-XX:MaxPermSize=128m
-Dfile.encoding=UTF8 -Duser.timezone=GMT
-Djava.security.auth.login.config="%CATALINA_HOME%/conf/jaas.config"</span></p>
<p style="margin-left: 18pt; text-indent: -18pt;">5、&nbsp;<span style="font-family: 宋体;">拷贝</span>liferay-portal-tomcat-5.5-jdk5-4.4.1"common<span style="font-family: 宋体;">到</span>%tomcat_home%"<span style="font-family: 宋体;">下</span></p>
<p style="margin-left: 18pt; text-indent: -18pt;">6、&nbsp;<span style="font-family: 宋体;">拷贝</span>liferay-portal-tomcat-5.5-jdk5-4.4.1"conf"Catalina"localhost<span style="font-family: 宋体;">下的</span>ROOT.xml<span style="font-family: 宋体;">到</span>%tomcat_home%"conf"Catalina"localhost<span style="font-family: 宋体;">下</span></p>
<p style="margin-left: 18pt; text-indent: -18pt;">7、&nbsp;<span style="font-family: 宋体;">修改</span>%tomcat_home%"conf"catalina.properties<span style="font-family: 宋体;">在</span>common.loader<span style="font-family: 宋体;">最后面加上</span>,${catalina.home}/common/lib/ext/*.jar<span style="font-family: 宋体;">使</span>tomcat<span style="font-family: 宋体;">启动时候默认加载</span>common"lib"ext<span style="font-family: 宋体;">下的</span>jar<span style="font-family: 宋体;">包</span></p>
<p style="margin-left: 18pt; text-indent: -18pt;">8、&nbsp;<span style="font-family: 宋体;">拷贝</span>liferay-portal-tomcat-5.5-jdk5-4.4.1"conf"jaas.config<span style="font-family: 宋体;">到</span>%tomcat_home%"conf"jaas.config</p>
<p style="margin-left: 18pt; text-indent: -18pt;">9、&nbsp;<span style="font-family: 宋体;">拷贝</span>D:"Java"liferay-portal-tomcat-5.5-jdk5-4.4.1"server"lib"*.jar<span style="font-family: 宋体;">到</span>%tomcat_home%"server"bin<span style="font-family: 宋体;">下</span></p>
<p style="margin-left: 18pt; text-indent: -18pt;"><span><span>10、<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span style="font-family: 宋体;">到这里配置完成，可以把</span>liferay-portal-tomcat-5.5-jdk5-4.4.1"webapps<span style="font-family: 宋体;">下的</span>ROOT<span style="font-family: 宋体;">拷贝到</span>%tomcat_home%"webapps<span style="font-family: 宋体;">下，也可以到官方网站上下载</span>liferay-portal-4.4.1.war<span style="font-family: 宋体;">进行部署</span></p>
<p style="margin-left: 18pt; text-indent: -18pt;"><span><span>11、<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span style="font-family: 宋体;">启动</span>%tomcat_home%"bin"startup.bat</p>
<p style="margin-left: 18pt; text-indent: -18pt;"><span><span>12、<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><a href="http://localhost:8080/">http://localhost:8080</a></p>
<p style="margin-left: 18pt; text-indent: -18pt;"><span><span>13、<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span style="font-family: 宋体;">默认用户名</span>test@liferay.org</p>
<p style="margin-left: 18pt; text-indent: -18pt;"><span><span>14、<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span style="font-family: 宋体;">默认密码</span> test</p>
<br />
<img src ="http://www.blogjava.net/libin2722/aggbug/181745.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-02-24 12:08 <a href="http://www.blogjava.net/libin2722/archive/2008/02/24/181745.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>