2009-07-19 12 views
4

JSFサーバー側の検証後に、失敗したフィールドを強調表示するための要件に取り組んでいます。検証のためにjavascriptを使用することはできません。 cssスタイルの変更とサーバー側の検証をリンクする方法はありますか?JSFバリデーションを使用したCssスタイルの変更

答えて

6

あなたは管理Beanでこれを行うことができます:

public class ValidBean { 

    private UIComponent myComponent; 

    public UIComponent getMyComponent() { 
    return myComponent; 
    } 

    public void setMyComponent(UIComponent myComponent) { 
    this.myComponent = myComponent; 
    } 

    public String getErrorStyle() { 
    FacesContext context = FacesContext 
     .getCurrentInstance(); 
    String clientId = myComponent.getClientId(context); 
    Iterator<FacesMessage> messages = context 
     .getMessages(clientId); 
    while (messages.hasNext()) { 
     if (messages.next().getSeverity().compareTo(
      FacesMessage.SEVERITY_ERROR) >= 0) { 
     return "background-color: red"; 
     } 
    } 
    return null; 
    } 
} 

Requestスコープの変数:

<managed-bean> 
    <managed-bean-name>validBean</managed-bean-name> 
    <managed-bean-class>stylevalid.ValidBean</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 

サンプルビュー:

<f:view> 
    <h:form> 
     <h:inputText binding="#{validBean.myComponent}" styleClass="foo" 
     style="#{validBean.errorStyle}"> 
     <f:validateLength minimum="6" /> 
     </h:inputText> 
     <h:commandButton /> 
     <h:messages /> 
    </h:form> 
    </f:view> 

コンポーネントをバッキングBeanにバインドされています。エラーメッセージがコンポーネントのキューに入れられている場合、そのCSSクラス設定はそのスタイル属性で上書きされます。

+0

こんにちは、このメソッドはよく見えるし、動作もjspに豆のCSSスタイルを注入している標準的な練習はJSFです。メンテナンスの観点からは、Javaクラスで変更が行われなければならないことが完全に明らかです。そして、別のスタイル要素を追加したい場合、それは可能ではありません。それは私のための要因ではありませんが、私はただの将来の問題を心配していました。 – Barun

+0

もう少し良い方法は、styleClass属性を動的に決定することです。そうすれば、JavaクラスではなくCSSファイルを変更するだけで済みます。 – Drew

+0

@Barun - あなたは正しいです。理想的なソリューションではありません。コアコンポーネントは少し基本的な傾向があります。より豊かな経験のためにコントロールライブラリへのフォークルック。代わりに、errorStyleをブール値にして、関数を介してスタイル値を解決することもできます。#{myfn:resolve(validBean.errorStyle、 'szErrStyle'、 'szOkStyle')}そうすれば、バックエンドに漏れるプレゼンテーションレイヤの詳細が少なくなります。 – McDowell

1

シームフレームワークは非常に簡単です。これをチェックしてください:http://www.redhat.com/docs/manuals/jboss/jboss-eap-4.2/doc/seam/Seam_Reference_Guide/JSF_form_validation_in_Seam.html

+0

こんにちは、このメソッドはうまく見えますが、現在のプロジェクトで継ぎ目を使用していません...残念ですが、Seamコンストラクトが多くの場合に本当に助けになるからです。 – Barun

+0

ご迷惑をおかけして申し訳ありません。 Seamは本当にJSFのキラーアプリです。しかし、私はSeamを使用しないJSFアプリケーションに取り組んでおり、ページフローを邪魔にして状態を維持しているのを見ているので、共感できます。 – Drew

+0

ここに同じ状態...状態を維持することに関連する問題...私たちはSpring Webflowを使っています...しかし、別のトピックのためです... – Barun

関連する問題