事前検証メソッドの実装
バリデータの実装でオーバーライドできる残り 2 つのメソッドは、performFullPreValidation と performLimitedPreValidation です。これらのメソッドは、操作 (またはほかの UI コンポーネント) を UI 内で有効、無効、または非表示にするかどうかを知るためにクライアントによって呼び出されるため、同じ機能を提供します。performLimitedPreValidation は、操作を UI に表示するかどうかをクライアントが素早く確認しようとするときに呼び出して使用します。このメソッドを呼び出すクライアントは、どんな場合にも操作が正確に非表示になるとは保証されていないことを知る必要があります。このメソッドはパフォーマンスのために精度を犠牲にしています。逆に、パフォーマンスが低下しても正確な結果が必要な場合に、クライアントは performFullPreValidation を呼び出します。
事前検証の例を以下に示します。
例 1:
各行に、チェックアウト、チェックイン、改訂、または削除の操作アイコンを表示できるテーブルをレンダリングしています。テーブルのオブジェクトを指定する場合、どの行のどの操作を有効にする必要がありますか。
|
この場合、パフォーマンス上の理由で制限付き事前検証を実行することが多いと考えられます。
|
例 2:
ドキュメントの詳細ページで操作のドロップダウンリストをレンダリングしています。複数の操作のリストを指定する場合、この特定のドキュメントではどちらを使用できるようにする必要がありますか。
|
パフォーマンスがあまり問題にならず (最初の例ではオブジェクトが複数ですが、ここでは 1 つしかないため)、精度が重要であるので、この場合、完全な事前検証を実行することが多いと考えられます。
|
それぞれの事前検証メソッドの引数リストおよびリターンタイプは同じです。
public UIValidationResultSet performFullPreValidation (String
validationKey, UIValidationCriteria validationCriteria,
Locale locale)
public UIValidationResultSet performLimitedPreValidation
(String validationKey, UIValidationCriteria
validationCriteria, Locale locale)
performFullPreValidation の疑似実装は次のような形になります。
import com.ptc.core.ui.validation.*;
…
public class MyValidator extends DefaultUIComponentValidator{
…
public UIValidationResultSet performFullPreValidation (String
a_key,
UIValidationCriteria a_criteria, Locale a_locale){
// get required info from UIValidationCriteria
WTContainerRef parentContainer =
a_criteria.getParentContainer();
WTCollection targetObjects = a_criteria.getTargetObjects();
WTPrincipalReference userRef = a_criteria.getUser();
// create result set to return
UIValidationResultSet resultSet = new
UIValidationResultSet();
// iterate through target objects
Iterator targetRefIterator =
targetObjects.referenceIterator();
while (targetRefIterator.hasNext()){
WTReference targetRef =
(WTReference)targetRefIterator.next();
if (このオブジェクトについてこの操作の続行を許可できる){
resultSet.addResult(new UIValidationResult(a_key,
targetRef,
UIValidationStatus.PERMITTED, null));
}
else{
resultSet.addResult(new UIValidationResult(a_key,
targetRef,
UIValidationStatus.DENIED, new
UIValidationMsg
(ローカライズされたテキスト,
UIValidationMsgType.INFO)));
}
}
// return the result set
return resultSet
}
}
performLimitedPreValidation の疑似コードは、performFullPreValidation の上記の例と同じです。実際の実装における唯一の相違点は、完全な事前検証の例では有効性を決定するための精査のレベルがより高く、パフォーマンスがより低い点です。ただし、実際には、限定的な事前検証チェックと完全な事前検証チェックが同じである可能性があると知っておくことは重要です (この場合、完全な事前検証を常に実行することによるパフォーマンスへの大きな影響はないと言えます)。