目的
ポータルテクノロジーに参加し、JSR286仕様が提供する可能性を探る作業計画
1.プロジェクトを作成する2.ポートレット設定を作成し、ポータルページに表示する
3.設定を保存し、バリデーターで設定を確認します
4.ポートレット設定に応じて表示モードを作成します
5.単一のポートレットアプリケーション内でイベントを生成および処理します。
JSR286仕様がどのように活発に開発されているか、Sunがポータルバージョンを1つずつリベットし、さまざまな利点を詰め込む方法については、以前に書きました。 Sun Java system Serverの直接の親であるフリーフロートGlassFishに移行した後、無料のコミュニティにはポータルのブランチが与えられることが期待されています。 ポートレットとそれらを使用するときに表示されるボーナスを注意深く見る必要があります。 タールスプーンについては忘れません。
アプリケーションの説明
ポートレットアプリケーションには、 SearchPortletとDetailsPortletの 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){
if ( this .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コンパイル段階で生成されます。
新しい設定を保存する方法と「保存」ボタンをクリックするとどうなるか、次のシリーズで説明します!
*このソースコードは、 ソースコードハイライターで強調表示されました。