portlet的開發介紹

根據Portlet1.0的標準,編寫Portlet可以通過實現javax.portlet.Portlet接口和繼javax.portlet.GenericPortlet抽象類。下面具體介紹這兩種方式


第一種:實現Portlet接口方式


Javax.portlet.Portlet接口有四個方法,分別是:init,processAction,render和destroy。四個函數的描述
init() 當Portlet容器初始化該Portlet的時候調用該函數,一個Portlet在Portlet容器中只有一個實例,並且這個實例由多個用戶共享,其方式與一個servlet在應用服務器中由多個用戶共享的方式一樣。
destroy() 當Portal終止時,portlet結束服務,然後用destroy()方法來銷燬,最後portlet由垃圾收集工具收集並結束。
processAction() 當頁面請求是一個Action請求的時候調用該函數。
render() 當Portlet被調用顯示頁面的時候執行該函數。


下面的例子顯示了一個基本的實現了javax.portlet.Portlet的portlet。它只是在一個portlet窗口中顯示一行語句:”Hello,world!”
package demo;
import java.io.IOException;
import java.io.PrintWriter;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.Portlet;
import javax.portlet.PortletConfig;
import javax.portlet.PortletException;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.UnavailableException;
public class HelloWorldPortlet implements Portlet {
public HelloWorldPortlet() {
   super();
}
public void init(PortletConfig config) throws UnavailableException {
}
public void destroy() {
}
public void render(RenderRequest request, RenderResponse response)
   throws PortletException, IOException {
    PrintWriter writer = response.getWriter();
    writer.print("hello,world!");
   
}
public void processAction(ActionRequest request, ActionResponse response)
   throws PortletException, IOException {
}
}

第二種,繼承GenericPortlet抽象類方式。


javax.portlet.GenericPortlet抽象類除了init、processAction、render、destroy四個方法外,再擴展了三個方法:doView、doEdit、doHelp,簡化了Portlet的書寫,三個方法的描述:
doView() 當Portlet是VIEW模式的時候,Portlet容器將調用該函數處理頁面顯示。
doEdit() 當Portlet是EDIT模式的時候,Portlet容器將調用該函數處理頁面顯示。
doHelp() 當Portlet是HELP模式的時候,Portlet容器將調用該函數處理頁面

實例:
package demo;
impor javax.portlet.*;
import java.io.*;
import java.util. *
public class JSPPortlet extends GenericPortlet {
private PortletContext pContext;
public void init(PortletConfig config) throws PortletException {
    super.init(config);
    pContext = config.getPortletContext();
}
public void doView(RenderRequest request,RenderResponse response)
    throws PortletException,IOException {
PrintWriter writer = response.getWriter();
writer.print("view mode!");
}
public void doEdit(RenderRequest request,RenderResponse response)
    throws PortletException {
PrintWriter writer = response.getWriter();
writer.print("edit mode!");
}
public void doHelp(RenderRequest request,RenderResponse response)
    throws PortletException {
PrintWriter writer = response.getWriter();
writer.print("help mode!");
}
public void processAction (ActionRequest request, ActionResponse actionResponse)
    throws PortletException, java.io.IOException {
}
}

Porlet中模式、狀態讀取、設置


可以通過PortletRequest獲得到Portlet的窗口狀態和模式:
獲取窗口狀態:
WindowState state = request.getWindowState();
獲取窗口模式:
PortletMode mode = request.getPortletMode();
窗口狀態設置:直接通過actionRUL設置
PortletURL editURL = renderRequest.createRenderURL();
editURL.setPortletMode( PortletMode.EDIT );


每個Portlet對每個用戶可以有不同的配置參數,Portlet1.0標準提供了相應的方法和對象,用於讀取和設置用戶的配置參數:
例:
PortletPreferences prefs = request.getPreferences();
   String zip = prefs.getValue("zip","10000");
//獲取名爲’zip’的參數值,如果不存在,缺省值設爲:’10000’。

portlet.xml

每個portlet應用在/WEB-INF文件夾中都有一個portlet.xml文件,它是portlet應用的部署描述符 
包含portlet 應用程序的配置參數,以及所有portlet所提供的一般信息(如 portlet 支持的標記類型)。 Portal Server 使用該信息爲 portlet 提供服務。


<?xml version="1.0" encoding="UTF-8"?>
<portlet-app>
<portlet>
   <portlet-name>SimplePortlet</portlet-name>
   <portlet-class>
    com.wiscom.newportal.app.wiscomSample.ArticlePortlet
   </portlet-class>

   <expiration-cache>-1</expiration-cache>

   <supports>
    <mime-type>text/html</mime-type>
    <portlet-mode>edit</portlet-mode>
    <portlet-mode>help</portlet-mode>
   </supports>
   <portlet-info>
    <title>SimplePortlet</title>
    <short-title>SimplePortlet</short-title>
    <keywords>SimplePortlet</keywords>
   </portlet-info>

   <portlet-preferences>
    <preference>
     <name>name1</name>
     <value>value1</value>
     <read-only>false</read-only>
    </preference>
   </portlet-preferences>
</portlet>
</portlet-app>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章