JSR286ポートレットアプリケーションの作成、パート1

目的

ポータルテクノロジーに参加し、JSR286仕様が提供する可能性を探る



作業計画

1.プロジェクトを作成する

2.ポートレット設定を作成し、ポータルページに表示する

3.設定を保存し、バリデーターで設定を確認します

4.ポートレット設定に応じて表示モードを作成します

5.単一のポートレットアプリケーション内でイベントを生成および処理します。



JSR286仕様がどのように活発に開発されているか、Sunがポータルバージョンを1つずつリベットし、さまざまな利点を詰め込む方法については、以前に書きました。 Sun Java system Serverの直接の親であるフリーフロートGlassFishに移行した後、無料のコミュニティにはポータルのブランチが与えられることが期待されています。 ポートレットとそれらを使用するときに表示されるボーナスを注意深く見る必要があります。 タールスプーンについては忘れません。



アプリケーションの説明



ポートレットアプリケーションには、 SearchPortletDetailsPortletの 2つのポートレットがあります。 ユーザーは最初のポートレットを使用して従業員を検索し、2番目のポートレットでは結果を表示します。



プロジェクトの簡単な概要






同様の結果を得るには、プロジェクトを作成します

ファイル -> 新規プロジェクト -> Web- > HRPortletExampleという名前のWebアプリケーション

サーバーについては、以前に登録されたOpenPortal Portlet Container 2.0を選択します(以前の記事を参照)。 ポートレットサポートを選択し、クラス名SearchPortletでポートレットを作成します。

図に示すパッケージにポートレットを忘れずに配置してください。

そのため、ポートレットアプリケーションとダミーポートレットがあります。 それでは、他のことをしましょう。



プロジェクトのインフラ

人のクラス

クラスru.habr.utils.Personを作成します。 このクラスは従業員に責任を負います。



パッケージru.habr.utils;

import java.io.Serializable;

パブリック クラス Personは、Comparable <Person>、Serializable {

private int id;

プライベート文字列名。

プライベート文字列の姓。

プライベートストリング部門。

プライベート文字列ランク。



公開者(){

}



public Person( int id、String ... data){

// ArrayIndexOutOfBoundsExceptionを回避するためのTO-DO挿入長チェック

this .id = id;

this .name = data [0];

this .surname = data [1];

this .department = data [2];

this .rank = data [3];

}



@Override

public String toString(){

StringBuilder sb = new StringBuilder();

sb.append(名前).append( "" )。

追加(姓).append( ":::" )。

追加(部門).append( ":::" )。

追加(ランク);

return sb.toString();

}



public String getFullString(){

StringBuilder sb = new StringBuilder();

sb.append(名前).append(姓).append(部署).append(ランク);

return sb.toString();

}



public String getTokenizedRepersentation(){

StringBuilder sb = new StringBuilder();

sb.append( this .id).append( ":" );

sb.append( this .name).append( ":" );

sb.append( この .surname).append( ":" );

sb.append( この .department).append( ":" );

sb.append( この .rank);



return sb.toString();

}



public static Person restorePersonFromTokenizedRepresentation(String tokenizedRepresentation){

人物person = null ;

文字列[] dataStr = tokenizedRepresentation.split( ":" );

if (dataStr.length == 5){

person = new Person();

person.setId(Integer.valueOf(dataStr [0]));

person.setName(dataStr [1]);

person.setSurname(dataStr [2]);

person.setDepartment(dataStr [3]);

person.setRank(dataStr [4]);

}

帰還者;

}



@Override

public int hashCode(){

return department.hashCode();

}



@Override

public boolean equals(Object obj){

ブールisEqual = false ;



if (obj instanceof Person){

ifthis .getId()==((Person)obj).getId()){

isEqual = true ;

}

}



return isEqual;

}



public int compareTo(Person inputPerson){

return surname.compareTo(inputPerson.getSurname());

}

// ...

}


// ...の代わりに、クラスのフィールドにゲッターとセッター挿入します。

従業員を検索するには、 パブリック String getFullString()メソッドが必要です。また、クラスインスタンスを文字列として便利に保存するには、 パブリック String getTokenizedRepersentation()メソッドとパブリック 静的 Person restorePersonFromTokenizedRepresentation(String tokenizedRepresentation)が必要です。 このような贅沢な方法が必要な理由は、以下で説明します。 親愛なる読者がそれを取り除く方法を教えてくれたら、私は非常に感謝します。

クラスはComparableインターフェースのメソッドを記述し(従業員をソートできるようにする)、インターフェース(Serializableマーカー)でマークされているため、従業員をシリアル化できることに注意してください。

並べ替えは、ページに従業員のリストを表示するのに役立ちます。また、イベントを通じて、ある従業員をあるポートレットから別のポートレットに転送するには、シリアル化が必要です。



クラスutilclass

このクラスは、従業員とともにファイルを読み取り、Personクラスのインスタンスを作成してMapに配置します。キーは従業員IDで、値は従業員自体です。

ソースの詳細を検討します。検索する方法のみを示します。

public ArrayList <Person> searchForPerson(String searchString){

ArrayList <Person> resultList = null ;

if (searchString == null || searchString.trim()。replace( """" ).length()<1){

nullを 返し ます

} else {

resultList = new ArrayList <Person>();

searchString = searchString.trim()。replace( """" );

for (Person p:mapWithPersons.values()){

if (p.getFullString()。toLowerCase()。contains(searchString.toLowerCase())){

resultList.add(p);

}

}

}

return resultList;

}


すべてがシンプル、フラット、パラレルです。従業員は文字列に引き込まれ、従業員の文字列の一部を検索し、ユーザーが入力した文字が一致します。 要するに、ポイントは検索にありません、先に進みます。



SearchPortletポートレット

このポートレットには、検索文字列と検索ボタンがあります。 編集モードを示すために、表示モードで従業員の完全なリストを表示する機能を追加します。 次のようになります。

プロジェクトの簡単な概要








portlet.xmlに設定を追加する

ポートレットの設定はportlet.xml記述されています。それを見て、記述してみましょう。

< ポートレット >

< description > SearchPortlet </ description >

< ポートレット名 > SearchPortlet </ ポートレット名 >

< display-name > SearchPortlet </ display-name >

< portlet-class > ru.habr.portlet.SearchPortlet </ portlet-class >

< 有効期限キャッシュ > 0 </ 有効期限キャッシュ >

< サポート >

< mime-type > text / html </ mime-type >

< ポートレットモード >表示 </ ポートレットモード >

< ポートレットモード >編集</ ポートレットモード >

< ポートレットモード >ヘルプ</ ポートレットモード >

</ サポート >

< resource-bundle > en.habr.portlet.messages </ resource-bundle >

< ポートレット情報 >

< title > SearchPortlet </ title >

< ショートタイトル > SearchPortlet </ / ショートタイトル >

</ ポートレット情報 >

< ポートレット設定 >

< 設定 >

< name > showPersonsList </ name >

< > false </ >

</ 設定 >

</ ポートレット設定 >

</ ポートレット >


< portlet-preferences >セクションには、設定の名前(設定にアクセスできるようにするため)とデフォルト値が表示されます。 それと別のものは両方とも行の形式で保存されるため、入力エラーは避けられません。 バリデーターは、設定の正確性を検証するために使用されます。 次回それらについてお話します。



SearchPortletポートレットでdoEditメソッドを編集する

SearchPortletクラスに移動し、ポートレット構成モードの表示に応答するdoEditメソッドを探します。

@Override

public void doEdit(RenderRequestリクエスト、RenderResponseレスポンス)は、PortletException、IOException {

//設定値をjspに転送します

String prefValue = request.getPreferences()。GetValue(PREF_SHOWPERSONS、 "" );

request.setAttribute(PREF_SHOWPERSONS、prefValue);



response.setContentType( "text / html" );

PortletRequestDispatcherディスパッチャー=

getPortletContext()。getRequestDispatcher( "/WEB-INF/jsp/SearchPortlet_edit.jsp" );

dispatcher.include(要求、応答);

}


現在のポートレット設定には、 request.getPreferences()。GetValue(PREF_SHOWPERSONS、 "")からアクセスできます

PREF_SHOWPERSONS- showPersonsList構成を格納する静的クラスフィールド。

注意深く読んだ場合、設定は属性の形式でjspに渡されることが推奨されることは明らかですが、jsp自体ではrenderRequest.getPreferences()を介して同じ方法で設定にアクセスできます。GetValue(PREF_SHOWPERSONS、 "")



SearchPortlet_edit.jsp

次のようになります。

<%@ page contentType = "text / html"%>

<%@ page pageEncoding = "UTF-8"%>

<%@ page import = "javax.portlet。*"%>

<%@ page import = "javax.portlet。*"%>

<%@ page import = "en.habr.portlet.SearchPortlet"%>

<%@ taglib uri = " java.sun.com/portlet_2_0 " prefix = "portlet"%>

< ポートレット:defineObjects />



<% boolean showPersonList = Boolean.valueOf(( String )renderRequest.getAttribute(SearchPortlet.PREF_SHOWPERSONS)); %>

< H4 >従業員検索ポートレットの編集。 </ H4 >



< form method = "post" action = "&# 60 ; ポートレット:actionURL /> " >

ページに従業員のリストを表示しますか? <br>

< 名前を 選択 = "<%= SearchPortlet.PREF_SHOWPERSONS%>" >

< オプション = "true" &# 60 ;%= showPersonList "選択済み" "" %&# 62 ; >はい</ オプション >

< オプション = "false" &# 60 ;%=! showPersonList "選択済み" "" %&# 62 ; >いいえ</ オプション >

</ 選択 >

< 入力 タイプ =「送信」 =「保存」 >

</ フォーム >


属性値を引き出し、値を表示し、ボタンが押されるのを待ちます。 編集モード自体は次のようになります。

プロジェクトの簡単な概要






フォームのURLは、 actionURLタグを使用してjspコンパイル段階で生成されます。



新しい設定を保存する方法と「保存」ボタンをクリックするとどうなるか、次のシリーズで説明します!



*このソースコードは、 ソースコードハイライターで強調表示されました。



All Articles