Junky's IT Notebook

          統計

          留言簿(8)

          積分與排名

          WebSphere Studio

          閱讀排行榜

          評論排行榜

          關于Liferay的配置文件 —— 基于Struts開發Portlet

          結合Liferay實例sample-struts-portlet,基于Struts開發Portlet一般具有以下配置文件:
          • liferay-display.xml
          • liferay-portlet.xml
          • portlet.xml
          • struts-config.xml
          • tiles-defs.xml
          • web.xml


          (1)liferay-display.xml (定義Portal 中Portlet 管理的目錄結構)
                  配置在Portlet 的顯示名稱,以及該portlet 在顯示列表中所在的目錄。值得注意的是該處并沒有直接給出在Portlet 顯示列表中的顯示名字,而是給出了Portlet ID,根據在porlet.xml 中portlet ID與Name 的關聯,可得到該Portlet 的顯示名字。

                  <display>
                      <category name="category.test">
                          <portlet id="sample_struts_portlet" />
                      </category>
                  </display>

                  效果:添加porlet 內容時,也就是在點擊“add content” 時,名叫sample_struts_portlet 的portlet 將在目錄中的test 項下顯示。

          (2)liferay-portlet.xml (定義基于Liferay Portal 下的Portlet 的特有屬性)
              該配置文件定義portlet 屬性和角色,該配置文件對基于JSR168的 portlet.xml 的屬性進行擴展。

                  <liferay-portlet-app>
                  <portlet>
                      <!-- 配置portlet 名,該名應對應于liferay-display.xml 中portlet 的id 屬性 -->
                      <portlet-name>sample_struts_portlet</portlet-name>
                      <!-- 配置portlet 的實現類,該類響應該portlet 的請求,實現功能  -->
                      <portlet-url-class>
                              com.liferay.portal.apache.bridges.struts.LiferayStrutsPortletURLImpl
                      </portlet-url-class>

                      <use-default-template>true</use-default-template>
                      <restore-current-view>true</restore-current-view>
                  </portlet>
                  <!-- 配置該portlet 的角色,以及角色的顯示名字,角色名role-name 是由portlet.xml 中進行定義 -->
                  <role-mapper>
                      <role-name>administrator</role-name>
                      <role-link>Administrator</role-link>
                  </role-mapper>
                  <role-mapper>
                      <role-name>guest</role-name>
                      <role-link>Guest</role-link>
                  </role-mapper>
                  <role-mapper>
                      <role-name>power-user</role-name>
                      <role-link>Power User</role-link>
                  </role-mapper>
                  <role-mapper>
                      <role-name>user</role-name>
                      <role-link>User</role-link>
                  </role-mapper>
              </liferay-portlet-app>

              效果:該portlet 由com.liferay.portal.apache.bridges.struts.LiferayStrutsPortletURLImpl 類的實例進行處理,允許使用模版和實時刷新頁面。可配置administrator,guest,power-user,user 四種角色對其擁有不同的權限。

          (3)portlet.xml (Portlet 的標準屬性,該配置文件中的各項屬性符合JSR168 標準,并非Liferay專用)
                 該配置文件設置Portlet的各個屬性,該各項屬性在Portlet初始化時得以加載。

          <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 http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd">

              <portlet>
                  <portlet-name>sample_struts_portlet</portlet-name>

                 <!-- display-name 即為該Portlet顯示的名字,liferay-display.xml 中配置了Portlet  id,關聯該配置文件可找到其顯示的名字,如下“Sample Struts Portlet" -->
                  <display-name>Sample Struts Portlet</display-name>

                
          <!-- 由于在開發Portlet 時必須繼承Portlet 的基礎類,而此處是基于Struts 開發Portlet 時可繼承該類  -->
                  <portlet-class>org.apache.portals.bridges.struts.StrutsPortlet</portlet-class>
                 
                
          <!-- init-param 標簽表示Portlet 的初始化參數 ,由name 標簽和 value 標簽指明其名字和值的一對數據 -->
                  <init-param>
                      <name>ServletContextProvider</name>
                     
          <!-- 其值為該Portlet 可接收響應的URL或者類,URL 對應的類是哪個由Struts-config.xml 定義-->
                      <value>com.liferay.util.apache.bridges.struts.LiferayServletContextProviderWrapper</value>
                  </init-param>
                  <init-param>
                      <name>EditPage</name>
                      <value>/portlet_action/sample_struts_portlet/edit</value>
                  </init-param>
                  <init-param>
                      <name>HelpPage</name>
                      <value>/portlet_action/sample_struts_portlet/help</value>
                  </init-param>
                  <init-param>
                      <name>ViewPage</name>
                      <value>/portlet_action/sample_struts_portlet/view</value>
                  </init-param>


                  <expiration-cache>0</expiration-cache>

                
          <!-- 定義該Portlet 所支持的功能,體現在每個Portlet 的展現模式 -->
                  <supports>
                      <mime-type>text/html</mime-type>
                      <portlet-mode>edit</portlet-mode>
                      <portlet-mode>help</portlet-mode>
                  </supports>


                  <portlet-info>
                      <title>Sample Struts Portlet</title>
                      <short-title>Sample Struts Portlet</short-title>
                      <keywords>Sample Struts Portlet</keywords>
                  </portlet-info>

                 
          <!-- 指明對該Portlet 可能擁有權限的角色,該角色定義決定了liferay-portlet.xml 所配置的角色名  -->
                  <security-role-ref>
                      <role-name>administrator</role-name>
                  </security-role-ref>
                  <security-role-ref>
                      <role-name>guest</role-name>
                  </security-role-ref>
                  <security-role-ref>
                      <role-name>power-user</role-name>
                  </security-role-ref>
                  <security-role-ref>
                      <role-name>user</role-name>
                  </security-role-ref>
              </portlet>
          </portlet-app>

          效果:
          定義了Portlet 的基本信息,展現方式,以及對該Portlet 可能分配權限的用戶角色。


          (4)struts-config.xml (該配置文件為Struts 的配置文件,并非Liferay 專用)
          <struts-config>

              <!-- Forms Beans -->
              <form-beans>
                  <form-bean name="subscribeForm" type="com.sample.struts.struts.form.SubscribeForm" />
                  <form-bean name="unsubscribeForm" type="com.sample.struts.struts.form.UnsubscribeForm" />
                  <form-bean name="uploadForm" type="com.sample.struts.struts.form.UploadForm" />
              </form-beans>

              <!-- Action Mappings -->

              <action-mappings>

                  <!-- Sample Struts -->

                  <action path="/sample_struts_portlet/edit" forward="portlet.sample_struts_portlet.edit" />

                  <action path="/sample_struts_portlet/help" forward="portlet.sample_struts_portlet.help" />

                  <action path="/sample_struts_portlet/subscribe/action" type="com.sample.struts.struts.action.SubscribeAction" name="subscribeForm" scope="session" validate="true" input="portlet.sample_struts_portlet.subscribe">
                      <forward name="/sample_struts_portlet/subscribe_success" path="/portlet_action/sample_struts_portlet/subscribe_success" redirect="true" />
                  </action>

                      <!--
                      ……
                      該處省略的雷同的設置代碼
                       ……
                      -->

              <!-- Custom Request Processor -->

              <controller processorClass="org.apache.portals.bridges.struts.PortletTilesRequestProcessor" />

              <!-- Message Resources -->

              <message-resources parameter="content.test.Language" />

              <!-- Tiles Plugin -->

              <plug-in className="org.apache.struts.tiles.TilesPlugin" >
                  <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" />
                  <set-property property="moduleAware" value="true" />
                  <set-property property="definitions-parser-validate" value="true" />
              </plug-in>

              <!-- Validator Plugin -->

              <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
                  <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
              </plug-in>
          </struts-config>
          效果:此處可與其它基于Struts 應用開發同樣配置,與Liferay 相互獨立。


          (5)tiles-defs.xml (該配置文件是利用Tile 進行頁面的布局管理,并非Liferay 專用)

          <tiles-definitions>


              <!-- 關于頁面的布局定義,表示當請求的Url為 portlet.sample_struts_portlet 則以路徑path參數指定的 /html/portlet/sample_struts_portlet/template.jsp 頁面進行響應-->
              <definition name="portlet.sample_struts_portlet" path="/html/portlet/sample_struts_portlet/template.jsp" />
              <!-- 關于頁面的布局定義,表示名為 portlet.sample_struts_portlet.edit Url 的頁面嵌套頁面 /portlet/sample_struts_portlet/edit.jsp -->
              <definition name="portlet.sample_struts_portlet.edit" extends="portlet.sample_struts_portlet">
                  <put name="portlet_content" value="/portlet/sample_struts_portlet/edit.jsp" />
              </definition>
             
              <!--
                      ……
                      該處省略的雷同的設置代碼
                       ……
                -->

             
          <tiles-definitions>
            
          效果:此處可與其它基于Tiles 應用開發同樣配置,與Liferay 相互獨立。


          (6)web.xml (該配置文件為Tomcat 的應用配置文件,并非Liferay 專用)
          <web-app>
              <!-- 注意:此處的display-name與portlet.xml 中的display-name 含義不同,此處僅標識在Tomcat 下的應用編寫此不得與其它Portlet 和發布的其他應用標識重名 -->
              <display-name>sample-struts-portlet</display-name>

              <context-param>
                  <param-name>company_id</param-name>
                  <param-value>liferay.com</param-value>
              </context-param>

              <listener>
                  <listener-class>com.liferay.portal.kernel.servlet.PortletContextListener</listener-class>
              </listener>

              <servlet>
                  <servlet-name>sample_struts_portlet</servlet-name>
                  <servlet-class>com.liferay.portal.kernel.servlet.PortletServlet</servlet-class>
                  <init-param>
                      <param-name>portlet-class</param-name>
                      <param-value>org.apache.portals.bridges.struts.StrutsPortlet</param-value>
                  </init-param>
                  <load-on-startup>0</load-on-startup>
              </servlet>
              <servlet>
                  <servlet-name>PortletActionServlet</servlet-name>
                  <servlet-class>com.liferay.util.apache.bridges.struts.LiferayPortletServlet</servlet-class>
                  <init-param>
                      <param-name>config</param-name>
                      <param-value>/WEB-INF/struts-config.xml</param-value>
                  </init-param>
                  <load-on-startup>1</load-on-startup>
              </servlet>
              <servlet>
                  <servlet-name>TestSessionServlet</servlet-name>
                  <servlet-class>com.sample.struts.servlet.TestSessionServlet</servlet-class>
                  <load-on-startup>2</load-on-startup>
              </servlet>

              <servlet-mapping>
                  <servlet-name>sample_struts_portlet</servlet-name>
                  <url-pattern>/sample_struts_portlet/*</url-pattern>
              </servlet-mapping>
              <servlet-mapping>
                  <servlet-name>PortletActionServlet</servlet-name>
                  <url-pattern>/portlet_action/*</url-pattern>
              </servlet-mapping>
              <servlet-mapping>
                  <servlet-name>TestSessionServlet</servlet-name>
                  <url-pattern>/test_session/*</url-pattern>
              </servlet-mapping>

              <taglib>
                  <taglib-uri>http://java.sun.com/portlet</taglib-uri>
                  <taglib-location>/WEB-INF/tld/liferay-portlet.tld</taglib-location>
              </taglib>
              <taglib>
                  <taglib-uri>http://struts.apache.org/tags-bean</taglib-uri>
                  <taglib-location>/WEB-INF/tld/struts-bean.tld</taglib-location>
              </taglib>
              <taglib>
                  <taglib-uri>http://portals.apache.org/bridges/struts/tags-portlet-html</taglib-uri>
                  <taglib-location>/WEB-INF/tld/struts-portlet-html.tld</taglib-location>
              </taglib>
              <taglib>
                  <taglib-uri>http://struts.apache.org/tags-logic</taglib-uri>
                  <taglib-location>/WEB-INF/tld/struts-logic.tld</taglib-location>
              </taglib>
              <taglib>
                  <taglib-uri>http://struts.apache.org/tags-nested</taglib-uri>
                  <taglib-location>/WEB-INF/tld/struts-nested.tld</taglib-location>
              </taglib>
              <taglib>
                  <taglib-uri>http://struts.apache.org/tags-tiles</taglib-uri>
                  <taglib-location>/WEB-INF/tld/struts-tiles.tld</taglib-location>
              </taglib>
          </web-app>

          效果:此處可與其它基于Tomcat 應用開發同樣配置,但與Liferay 不完全獨立。

          posted on 2007-05-31 14:00 junky 閱讀(1321) 評論(1)  編輯  收藏 所屬分類: portal

          評論

          # re: 關于Liferay的配置文件 —— 基于Struts開發Portlet 2007-08-14 16:10 小雪飛刀

          LZ的文章寫得很好!
          請教個問題,我的原有的web應用在轉變為Portlet時,只需要修改struts-config.xml文件吧,原有的Action都可以復用否?
          另外,不用Tiles進行頁面跳轉,應該也是可以的吧。  回復  更多評論   

          主站蜘蛛池模板: 承德县| 福安市| 罗甸县| 徐汇区| 五家渠市| 青岛市| 临夏县| 新野县| 云南省| 五指山市| 繁峙县| 铜陵市| 南安市| 依安县| 杭锦后旗| 漳州市| 连江县| 鄂托克旗| 彰武县| 斗六市| 湛江市| 龙口市| 阳原县| 吴旗县| 濉溪县| 三穗县| 崇左市| 行唐县| 大关县| 溧阳市| 江北区| 青冈县| 遂平县| 寻甸| 象州县| 博白县| 永靖县| 班玛县| 曲阳县| 饶河县| 凌海市|