![]() ![]() ![]() ![]() |
WebLogic Portal により、ユーザ プロファイル情報をコンシューマからプロデューサに渡すことができます。この機能により、WebLogic Portal で多くのパーソナライゼーション機能を利用可能にして、連合ポータルで機能させることができます。この章では、連合ポータルでユーザ プロファイル情報を処理する方法を説明します。連合ポータルでユーザ プロファイル情報を使用できるようにするには、コンシューマ アプリケーションとプロデューサ アプリケーションの両方で何らかのコンフィグレーションが必要です。
この節では、ユーザ プロファイル伝播の目的と、WebLogic Portal が連合環境でユーザ プロファイル データを伝播する方法を説明します。
ユーザ プロファイルは、ユーザ固有の情報を含むプロパティ セットの集合です。WebLogic Portal は、ユーザ プロファイルに依存する多くの機能を提供します。たとえば、WebLogic Portal パーソナライゼーション機能は、ユーザ プロファイルに依存して、特定のタイプのユーザにカスタマイズされたコンテンツを配信します。
たとえば、Workshop for WebLogic では、性別、雇用日、電子メール アドレスなどのプロパティを格納する従業員というプロパティ セットを作成できます。この情報を使用すると、ポータルでユーザが行う操作をパーソナライズできます。ユーザがポータルにログインするときに、ポータルはプロパティ値にアクセスし、設定したパーソナライゼーション ルールに基づいて、パーソナライズされたコンテンツ、電子メール、入力済みのフォーム、および割引にその値を適用できます。
パーソナライゼーションの詳細については、『対話管理ガイド』を参照してください。ユーザ プロファイルの作成の詳細については、『ユーザ管理ガイド』を参照してください。
WebLogic Portal プロデューサがパーソナライズしたコンテンツをコンシューマに返すには、ユーザ情報をコンシューマからプロデューサに伝達する必要があります。連合ポータル内のユーザ プロファイル情報を使用するための基本要件には、次のものが含まれます。
ヒント : | 特定のポートレットに必要なプロパティのリストが取得されると、それは将来のアクセスのために、コンシューマ データベースに保存されます。 |
図 11-1 に示すように、コンシューマがプロデューサに最初に接続すると、プロデューサは、提供するポートレットのリストと、各ポートレットが必要とするユーザ情報に対する要求を返します。
ポートレットがユーザ情報を要求すると、図 11-2 に示されているように、ポートレットを提供できるようにするため、コンシューマは、プロデューサに getMarkupRequest()
の一部としてその情報を提供しようと試みます。WebLogic Portal は一般にマッピング ファイルと一緒に P13N API を使用し、要求されたユーザ プロパティをコンシューマ側で取得します。
WSRP プロトコルは、ユーザ情報の保存および交換用に標準形式を指定します。この形式は、P3P (Platform for Privacy Preferences) と呼ばれ、インターネット標準です。WebLogic Portal アプリケーションが、WebLogic Portal ユーザ プロファイル形式だけでなく、この形式で表示されるユーザ情報を受け入れるようにコンフィグレーションできます。
詳細については、「P3P の例」を参照してください。P3P 仕様は、W3C の Web サイトである www.w3.org/TR/P3P から入手できます。
プロデューサ側とコンシューマ側で定義されたユーザ プロパティが一致しない場合に、この機能を使用します。まったく同じユーザ プロパティが、コンシューマ側とプロデューサ側に存在する場合、この機能を使用する必要はありません。
ヒント : | プロダクション環境でのベスト プラクティスは、伝播対象の各ユーザ プロパティに対して、プロパティ セットとプロパティ名を指定することです。すべてのプロパティを取得することは、プロパティの小さいサブセットのみが必要な場合は非効率的です。 |
連合ポータルでユーザ プロファイル情報を使用するには、プロデューサでデプロイされているポートレットにより、どのユーザ プロパティが要求されるかをプロデューサ側で宣言する必要があります。宣言されたプロパティは、コンシューマへの応答で整理されて、コンシューマ アプリケーションに戻されます。コンシューマ アプリケーションは、プロデューサを登録するときに、要求されたユーザ プロパティ値を返す必要があります。
ユーザ プロファイル情報を使用するためにプロデューサでデプロイされるポートレットをコンフィグレーションする手順は、Java ポートレットまたは非 Java ポートレットのどちらをコンフィグレーションするかによって異なります。
Java ポートレット仕様は、名前、電子メール アドレス、電話番号などのユーザ属性に、Java ポートレットがどのようにアクセスするかを指定します。この節では、プロデューサ アプリケーションでデプロイされている Java ポートレットに対してユーザ属性を指定する方法、および Java ポートレットがユーザ情報を取得する方法について説明します。
ヒント : | ユーザ情報に Java ポートレットがアクセスする方法の詳細については、Java ポートレット仕様のユーザ情報の節を参照してください。 |
Java ポートレット仕様は、デプロイされている Java ポートレットにより要求されるユーザ属性を指定するため、<user-attribute>
要素を定義します。図 11-1 は、指定されているユーザ プロパティがある portlet.xml
ファイルの一部を示しています。<name>
要素は、ユーザ属性名を指定します。
<portlet-app>
...
<user-attribute>
<name>Employee/Language</name>
</user-attribute>
<user-attribute>
<name>Employee/Role</name>
</user-attribute>
...
</portlet-app>
「デフォルト ユーザ プロパティ セットの作成」も参照してください。
Java ポートレット仕様は、Java ポートレットがデプロイされているポータル環境から、Java ポートレットがユーザ情報を取得する方法も指定します。ポートレットは、要求を行ったユーザのユーザ属性を含む Map オブジェクトを取得できます。この Map オブジェクトを PortletRequest.USER_INFO
定数を使って、要求から取得できます。
コード リスト 11-2 のコード例は、ユーザ情報の Map を Java ポートレットに関連付けられている JSP 内の要求から取得する方法を示しています。ユーザ プロパティ値は、ユーザ プロパティ名をキーとして使用して、Map から取得されます。
...
Map<String, Object> props;
PortletRequest portletRequest = (PortletRequest)
request.getAttribute("javax.portlet.request");
if (portletRequest != null) {
props = (Map<String, Object>)
portletRequest.getAttribute(PortletRequest.USER_INFO) ;
} else {
props = null ;
}
if (props == null) {%>
<p>Empty Profile</p>
<%} else {%>
<p><%= props.get("Employee/Language") %></p>
<p><%= props.get("Employee/Role") %></p>
<%}%>
...
コード リスト 11-3 では、portlet.xml
ファイルで指定されたサンプル ユーザ属性を示します。この章は、デフォルト ユーザ プロパティ セットを作成して <user-attribute>
プロパティを効率化できる方法について説明します。たとえば、「従業員」というデフォルト ユーザ プロパティを作成することで、コード リスト 11-3 にある属性名を <name>言語</name> に短縮することができます。
<user-attribute>
<name>Employee/Language</name>
</user-attribute>
デフォルト ユーザ プロパティ セットを作成するには、まずポータル Web アプリケーションの WEB-INF
ディレクトリに weblogic-portlet.xml
ファイルを作成します。次に、<user-property-set>
属性を使用してデフォルト ユーザ プロパティ セットをコンフィグレーションします。
コード リスト 11-4 では、Web アプリケーションのすべてのポートレットに「従業員」という名前のデフォルト ユーザ プロパティ セットを作成する方法について示します。
<portal-container>
<user-property-set>Employee</user-property-set>
</portal-container>
コード リスト 11-5 では、特定のポートレットにデフォルト ユーザ プロパティ セットを作成する方法について示します。
<portlet>
<name>portletName</name>
<user-property-set>Employee</user-property-set>
....
</portlet>
weblogic-portlet.xml
で指定されたデフォルト ユーザ プロパティ セット「従業員」で、portlet.xml
ファイルの コード リスト 11-3 に示すように <user-attribute>
値をコーディングすることができます。
<user-attribute>
<name>Language</name>
</user-attribute>
weblogic-portlet.xml
ファイルの詳細については、『ポートレット開発ガイド』の「ポートレットの構築」を参照してください。
コンシューマ側とプロデューサ側のユーザ プロパティが一致しない場合、コンシューマ側でマッピング ファイルを作成できます。マッピング ファイルにより、コンシューマは、プロデューサにより要求されるプロパティにマップするユーザ プロパティを取得できます。ユーザ プロパティのマッピングの詳細については、「コンシューマのコンフィグレーション」を参照してください。
この節では、プロデューサ アプリケーションでデプロイされている非 Java ポートレットに対してユーザ属性を指定する方法について説明します。
非 Java ポートレットについては、記述子ファイルの wsrp-producer-config.xml
で必要なユーザ プロパティを指定します。このファイルは、プロデューサ Web アプリケーションの WEB-INF
ディレクトリに配置されます。コード リスト 11-7 は、サンプルの wsrp-producer-config.xml
ファイルを示しています。<requiredUserProperties>
要素は、プロデューサ Web アプリケーションでデプロイされているポートレットに対して要求されているユーザ プロパティを指定します (太字で表示)。例では、値 All
が、コンシューマがプロデューサに対してすべての利用可能なユーザ プロファイル情報を提供しなければならないことを指定しています。その他の可能な値については、この節で説明されています。
<?xml version="1.0" encoding="UTF-8"?>
<wsrp-producer-config
xmlns="http://www.bea.com/servers/weblogic/wsrp-producer-config/9.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:uddi="urn:uddi-org:api_v2"
xsi:schemaLocation="http://www.bea.com/servers/weblogic/wsrp-producer-config/9.0 wsrp-producer-config.xsd">
<description></description>
<service-config>
<registration required="true" secure="false"/>
<service-description secure="false" supports-method-get="true"/>
<markup secure="false" rewrite-urls="true" transport="string"/>
<portlet-management required="true" secure="false"/>
</service-config>
<supported-locales>
<locale>en</locale>
<locale>en-US</locale>
</supported-locales>
<requiredUserProperties properties="All">
</wsrp-producer-config>
</requiredUserProperties>
<requiredUserProperties>
要素には、次の 3 つの値のうちのいずれかを使用する properties
という 1 つの属性が含まれています。
All
- すべてのユーザ プロファイル情報を送信するようにコンシューマに指示します。次に例を示します。
<requiredUserProperties properties="All">
None
- どのユーザ プロファイル情報も送信しないようにコンシューマに指示します。次に例を示します。
<requiredUserProperties properties="None">
Specified
- 指定したユーザ プロファイル情報のみを送信するようにコンシューマに指示します。<specifiedProperties>
サブ要素を使用して、ポートレットにより要求されるユーザ情報を一覧表示します。次に例を示します。
<requiredUserProperties properties="specified">
<description>These are required properties</description>
<specifiedProperty name="Employee/name"/>
<specifiedProperty name="Employee/gender"/>
<specifiedProperty name="Employee/number"/>
</requiredUserProperties>
name
プロパティに指定される値は、次の形式のいずれかにすることができます。
propertySet
/
propertyName
- プロデューサに定義されているプロパティ セットの名前と、そのプロパティ セットのプロパティの名前。次に例を示します。
<requiredUserProperties properties="specified">
<specifiedProperty name="Employee/gender"/>
</requiredUserProperties>
propertySet
/
* - プロデューサで定義されているプロパティ セットの名前と、そのプロパティ セットのすべてのプロパティが要求されていることを指定するアスタリスク (*)。次に例を示します。
<netuix:requiredUserProperties properties="specified">
<specifiedProperty name="Employee/*"/>
</requiredUserProperties>
p3pName
- P3P ユーザ プロパティを指定します。次に例を示します。
<requiredUserProperties properties="specified">
<specifiedProperty name="name/given"/>
<specifiedProperty name="gender"/>
</requiredUserProperties>
どのユーザ情報も wsrp-producer-config.xml
で指定されない場合、その動作は None
の値が <requiredUserProperties>
で指定されている場合と同じ動作になります。
コード リスト 11-8 のコードの抜粋は、P13N タグの <profile:getProperty>
を使ってポートレットの JSP ファイルでユーザ プロパティを取得する方法を示しています。
<%
if (request.getUserPrincipal() != null) {
%>
<profile:getProfile profileKey="<%= request.getUserPrincipal().getName() %>" />
<%
} else { %>
<profile:getProfile profileKey="anonymous" groupOnly="true" />
<%
}
%>
<tr>
<td>Name</td>
<td id="wsrp_date"><profile:getProperty propertySet=
"Employee" propertyName="name"/></td>
</tr>
<tr>
<td>Gender</td>
<td id="wsrp_int_code"><profile:getProperty propertySet=
"Employee" propertyName="gender"/></td>
</tr>
<tr>
...
WebLogic Portal または非 WebLogic Portal コンシューマが拡張 P3P ユーザ プロファイル情報を送信する場合、ポートレットは、<profile:getProperty>
タグから取得した List オブジェクトとしてその拡張を取得できます。コード リスト 11-9 は、電話の内線番号を含む List を抽出するコード例を示します。この例では、homeInfo/postal/extensions
プロパティは、拡張 WSRP ユーザ プロパティです。
<profile:getProperty propertySet="<%= UserProperty.P3P_PROPERTY_SET_NAME %>" propertyName="homeInfo/postal/extensions" id="postalExtsObj"/>
<%
List<Element> teleExts = (List<Element>) postalExtsObj;
if (teleExts != null) {
for (int i = 0 ; i < teleExts.size() ; i++) {
String extStr = teleExts.get(i)
%>
<tr> <td>Postal Extension[<%= i %>]</td>
<td colspan="2"
id="postal_extensions[<%=i%>]"><%= extStr %></td> </tr>
<% }
}%>
コンシューマは、コンシューマに存在するプロパティに、プロデューサにより要求されたユーザ プロパティをマップできます。ユーザ プロパティのマッピングの詳細については、「コンシューマのコンフィグレーション」を参照してください。
多くの場合、プロデューサに存在するユーザ プロパティ セットとプロパティ名はコンシューマ側のものと一致しません。したがって、WebLogic Portal が、これらの名前を適切にマップできるようにします。この節では、コンフィグレーション ファイルの使用またはプログラミングにより、プロパティ セットとプロパティ名をマッピング クラスにマップする方法を説明します。
wsrp-user-property-config.xml
ファイルでユーザ プロファイル マッピングを指定します。このファイルは、コンシューマ Web アプリケーションの WEB-INF
ディレクトリに配置されます。
コード リスト 11-10 に示されているように、要素の <wsrp-user-property-map-bean>
は、このコンフィグレーション ファイルに表示できるトップレベルの要素です。<wsrp-user-property-map-bean>
の下に入る可能性がある要素は太字で表示され、次のものが含まれます。
<user-property-map>
- コンシューマに登録されているすべてのプロデューサに適用される、プロデューサからコンシューマへのマッピングを作成します。 <producer-user-property-map>
- <producer-handle>
要素で示されている特定のプロデューサに関連付けられているマッピングを作成します。 <mapper-class-name>
- マッピングをプログラミングにより実行するクラスを指定します。マッピング クラスの完全修飾クラス名を指定する必要があります。マッピング クラスの作成の詳細については、「マッピング クラスの使用」を参照してください。
コード リスト 11-10 に示されているように、<producer-user-property-map>
要素を使用して、プロデューサ固有のマッピングを直接またはマッピング クラスを使って作成できます。
<?xml version="1.0" encoding="UTF-8"?>
<wsrp-user-property-map-bean xmlns="http://www.bea.com/ns/portal/90/wsrp-user-property-config">
<!-- 登録済みのすべてのプロデューサについて ldap/name を Employee/name にマップします -->
<user-property-map>
<producer-property-name>Employee/name</producer-property-name>
<consumer-property>ldap/name</consumer-property>
</user-property-map><!-- 登録済みのすべてのプロデューサに適用するマッパー クラスを指定します -->
<mapper-class-name>myClasses.MyUserPropertyMapper1</mapper-class-name>
<!-- 特定のプロデューサについてのユーザ プロパティのマップ -->
<producer-user-property-map>
<producer-handle>complexProducer</producer-handle>
<user-property-map>
<producer-property-name>Employee/number</producer-property-name>
<consumer-property>"xxxxxx"</consumer-property>
</user-property-map>
</producer-user-property-map>
<!-- 特定のプロデューサのマッパー クラスを指定します -->
<producer-user-property-map>
<producer-handle>complexProducer2</producer-handle>
<mapper-class-name>myClasses.MyUserPropertyMapper2</mapper-class-name>
</producer-user-property-map>
</wsrp-user-property-map-bean>
<user-property-map>
の <producer-property-name>
サブ要素は、要求されたプロデューサ プロパティの propertySet
と propertyName
のペアを指定し、<consumer-property>
サブ要素は、コンシューマ側に存在する同等のペアを指定します。
<producer-property-name>
と <consumer-property>
のペアは次の形式にすることができます。
propertySetName/propertyName
- プロパティ セットの名前とそのプロパティ セット内のプロパティの名前。次に例を示します。<producer-property-name>propertySetName-A/propertyName-A</producer-property-name>
<consumer-property>propertySetName-B/propertyName-B</consumer-property>
propertySetName/*
- アスタリスク (*) は、そのプロパティ セット内のすべてのプロパティがマップされることを示します。このパターンは、コンシューマとプロデューサのマップされたプロパティ セットに、同じプロパティ名が存在すると仮定します。
たとえば、次の行は、プロデューサ上の propertySetName-A
内の全プロパティをコンシューマ側の propertySetName-B
にマップします。
<producer-property-name>propertySetName-A/*</producer-property-name>
<consumer-property>propertySetName-B/*</consumer-property>
propertyValue
- プロデューサから定数値へプロパティ名をマップします。たとえば、次の行は、propertyName-A
というプロパティを、プロデューサから、任意の文字列の定数にマップします。文字列の他に、別のタイプの定数を指定できます。詳細については、「定数のマッピング」を参照してください。 <producer-property-name>propertySetName-A/propertyName-A
</producer-property-name>
<consumer-property>"aStringValue"</consumer-property>
マッピング ファイルを使用して、要求したプロデューサ プロパティをコンシューマ プロパティにマップする他に、マッピング クラスを作成して、プログラミングによりコンシューマ側でユーザ プロパティ値をマップおよび設定できます。マッピング クラスを使用するには、以下の操作を行います。
getProducerProperties
メソッドをオーバーライドして、作成するマッピング機能を実装します。このメソッドの詳細については、「Javadoc」を参照してください。コード リスト 11-11 内のマッパー クラスの例は、ユーザ名に基づいてユーザに対する性別プロパティを設定します。 注意 : | DefaultUserPropertyMapper の拡張と getProducerProperties の無効化は、必須ではありませんが、最も簡単で最良の実施例です。必要に応じて、抽象ベース クラスも拡張できます。 |
wsrp-user-property-config.xml
ファイルでマッパー クラスをコンフィグレーションします。そのためには、コード リスト 11-11 に示されているパターンをたどる wsrp-user-property-config.xml
に、行を追加します。ここで producerHandle
は、コンシューマ側でプロデューサを識別するユニークな名前、myClasses.MyMapperClass
は、マッパー クラスの完全なクラス名を表します。 package com.bea.portlet.qa.wsrp.userprops;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import com.bea.p13n.property.EntityPropertyCache;
import com.bea.wsrp.consumer.userproperty.DefaultUserPropertyMapper;
import com.bea.wsrp.consumer.userproperty.RequiredUserProperties;
import com.bea.wsrp.consumer.userproperty.UserProperty;
public class TestUserPropertyMapper extends DefaultUserPropertyMapper {
private final static Set<String> MALE_NAMES = new HashSet<String>() ;
private final static Set<String> FEMALE_NAMES = new HashSet<String>() ;
static {
final String[] maleNames = {"Nate","Nathan","Eric","Subbu","Scott"};
MALE_NAMES.addAll(Arrays.asList(maleNames)) ;
final String[] femaleNames = {"Mandy","Geeta","Jenn","Jen","Jenny"} ;
FEMALE_NAMES.addAll(Arrays.asList(maleNames)) ;
}
/**
* user.name.given が設定される場合は、マップによりユーザの性別が設定されます
* @param requiredProperties プロデューサが要求するプロパティ
* @param map キーがプロデューサの名前であり、
* 値がコンシューマの名前であるマップ
* @param profile コンシューマでのユーザのプロファイル
* @return プロデューサにマップされたプロパティ
*/
public Collection<UserProperty> getProducerProperties(
RequiredUserProperties requiredProperties,
Map<String, String> map,
EntityPropertyCache profile) {
final Collection<UserProperty> properties =
super.getProducerProperties(requiredProperties, map, profile) ;
if (requiredProperties.isPropertyRequired("HR", "gender")) {
final String givenName = (String) getProperty(profile, "HR", "name.given") ;
if (MALE_NAMES.contains(givenName)) {
addUserProperty(properties, "HR", "gender", "M") ;
} else if (FEMALE_NAMES.contains(givenName)) {
addUserProperty(properties, "HR", "gender", "F") ;
}
}
return properties ;
}
}
wsrp-user-properties-config.xml
ファイルでマッピング クラスを宣言する必要があります。そのためには、<mapper-class-name>
要素を使用します。この要素は、次の例に示すように、プロパティとして完全修飾クラス名を使用します。
<mapper-class-name>myClasses.MyMapperClass
</mapper-class-name>
<wsrp-user-property-map-bean>
要素または <producer-user-property-map>
要素の下に、直接この要素を配置できます。コンフィグレーション ファイルの詳細については、「マッピング ファイルの使用」を参照してください。
ユーザ プロパティをユーザ プロパティにマップするだけでなく、ユーザ プロパティを定数値にマップできます。コンフィグレーション ファイルまたはマッパー クラスで、定数にマップできます。コード リスト 11-12 は、long
というプロパティが long 型の定数にマップされている wsrp-user-properties-config.xml
ファイルの一部を示しています。これは、/L
区切り記号で囲まれています。
...
<user-property-map>
<producer-property-name>map/long</producer-property-name>
<consumer-property>/L42/L</consumer-property>
</user-property-map>
...
表 11-1 には、すべての定数区切り記号が含まれています。
マッピング クラスを作成する場合、表 11-1 に示されている区切り記号を使用して定数を指定するか、com.bea.wsrp.consumer.userproperty.UserProperty
インタフェースで定義されている定数を指定できます。このインタフェースの詳細については、「Javadoc」を参照してください。
この節では、この章で前述した例の一部を書き直して、WebLogic Portal ユーザ属性の代わりに P3P 属性を使用する方法を示します。この節では、次の例について説明します。
portlet.xml ファイルは、Java ポートレットに対する標準のデプロイメント記述子です。コード リスト 11-13 は、P3P 属性がある portlet.xml
ファイルを示しています。このファイルの詳細については、「Java ポートレットのコンフィグレーション」を参照してください。
P3P 属性名は、常にプレフィックスの user
で始まり、慣例により、ドット (.) 区切り文字が名前の区切り要素として使用されます (例 : user.name.given
)。Java ポートレットにより使用されるすべての名前については、Java ポートレット仕様を参照してください。
<portlet-app>
...
<user-attribute>
<description>User Given Name</description>
<name>user.name.given</name>
</user-attribute>
<user-attribute>
<description>User Last Name</description>
<name>user.name.family</name>
</user-attribute>
<user-attribute>
<description>User eMail</description>
<name>user.home-info.online.email</name>
</user-attribute>
<user-attribute>
<description>Company Organization</description>
<name>user.business-info.postal.organization</name>
</user-attribute>
...
</portlet-app>
コード リスト 11-14 のコード例は、ユーザ情報の Map を Java ポートレットに関連付けられている JSP 内の要求から取得する方法を示しています。user.bdate
などの標準 P3P ユーザ プロパティ名が、ファイルで使用されています。
Map<String, Object> props;
PortletRequest portletRequest = (PortletRequest) request.getAttribute("javax.portlet.request");
if (portletRequest != null) {
props = (Map<String, Object>) portletRequest.getAttribute(PortletRequest.USER_INFO) ;
} else {
props = null ;
}
if (props == null) {%>
<p>Empty Profile</p>
<%} else {%>
<p><%= props.get("user.bdate
") %></p>
<p><%= props.get("user.business-info.telecom.telephone.intcode
") %></p>
<%}%>
...
コード リスト 11-15 のコードの抜粋は、P13N タグの <profile:getProperty>
を使ってポートレットの JSP ファイルで P3P プロパティを取得する方法を示しています。WebLogic Portal は定数 com.bea.wsrp.consumer.userproperty.UserProperty.P3P_PROPERTY_SET_NAME
を、標準 P3P ユーザ プロパティのセットであると認識します。
<%@ page import = "com.bea.wsrp.consumer.userproperty.UserProperty" %>
...
<%
if (request.getUserPrincipal() != null) {
%>
<profile:getProfile profileKey="<%= request.getUserPrincipal().getName() %>"
/>
<%
} else { %>
<profile:getProfile profileKey="anonymous" groupOnly="true" />
<%
}
%>
<tr>
<td>Date</td>
<td id="wsrp_date"><profile:getProperty propertySet=
"<%= UserProperty.P3P_PROPERTY_SET_NAME %>" propertyName="bdate"/></td>
</tr>
<tr>
<td>Int Code</td>
<td id="wsrp_int_code"><profile:getProperty propertySet=
"<%= UserProperty.P3P_PROPERTY_SET_NAME %>" propertyName=
"businessInfo/telecom/telephone/intcode"/></td>
</tr>
...
![]() ![]() ![]() |