私は、JSF 2.0でフィールドエラーの強調表示を追加する最善の方法についていくつかのガイダンス/意見を探しています。これまで私はCagatay's exampleを使用してロジックを少し調整して正常に実装しました。JSF 2.0の検証とフィールドの強調表示
String styleClass = (String) uiInput.getAttributes().get("styleClass");
//Check the valid flag
if (!uiInput.isValid())
{
//Component already has a styleclass
if (styleClass != null)
{
//check if it's already highlighted
if (!styleClass.contains("ui-input-invalid"))
{
//if not add the error class to it
styleClass = styleClass + " ui-input-invalid";
//and put the new styleclass back on the component
uiInput.getAttributes().put("styleClass", styleClass);
}
} else
{
//no current style class so just add the error class
uiInput.getAttributes().put("styleClass", "ui-input-invalid");
}
} else //component is valid so we might need to remove a highlight
{
//component has a styleclass
if (styleClass != null)
{
//check if it is already highlighted
if (styleClass.contains("ui-input-invalid"))
{
//remove error class from the string
styleClass = styleClass.replace("ui-input-invalid", "");
//and put the new styleclass back on the component
uiInput.getAttributes().put("styleClass", styleClass);
}
}
}
また、各コンポーネントのスタイルクラスにstyleClass="#{component.valid ? '' : 'ui-input-invalid'}"
を追加することを提案しました。
両方のメソッドは、Bean Validation JSR303と組み合わせて使用すると魅力的です。しかし私は2つの検証段階も追加しています。フィールドとフォームの検証が成功すると、フォーム全体、つまりフィールドの正しい組み合わせと1の一般的なビジネスルールを検証するための1を検証する。これらの段階でも強調表示を追加するために、私は手動で作業する必要があります。どちらのハイライト手法でも、コンポーネントのvalidフラグをfalseに手動で設定する必要があります。コンポーネントにアクセスするために、私はそれをフォームの形で独自のオブジェクトにバインドしました。 Cagatayの例では、すべてのコンポーネントをListに追加し、このリストをハイライト方法に渡す必要があります。私がスタイルクラスのアプローチを使用する場合、私はコンポーネントリストを心配する必要はなく、強調表示メソッドに渡す必要はありません。しかしこれは私にとってはより良いアプローチに見えますが、JSFページにロジックを追加していることが少し心配です。
あなたが気に入っているアプローチは何ですか、あるいは私が気づいていない別の方法がありますか?また、私は、コンポーネントにバインドせずに有効なフラグを設定する他の方法がないと思いますか?現時点では、すべてのコンポーネントをバインドしなければならないので、有効なフラグを設定できます。
Prime Facesはこれをデフォルトで行います。 – alphablue