2012-01-25 12 views
0

EDITをリセットします。私は、このコードのスニペットを持っている:カスタム検証とコンポーネントが

public class CreateUserManager { 
... 
protected boolean emailPrimariaValid; 

public CreateUserManager() { 
    ... 
    this.emailPrimariaValid = true; 
} 


public boolean isEmailPrimariaValid() { 
    FacesContext context = FacesContext.getCurrentInstance(); 
    UIInput input = (UIInput)context.getViewRoot().findComponent(":createUser:email_id"); 
    return input.isValid(); 
} 

public void setEmailPrimariaValid(boolean emailPrimariaValid) { 
    this.emailPrimariaValid = emailPrimariaValid; 
} 

}

私はこれを削除することに注意してください:

<h:inputText id="email_id" value="#{CreateUserManager.email}" 
     styleClass="#{CreateUserManager.emailPrimariaValid ? '' : 'inputErrorClass'}"> 
    <f:validator validatorId="EmailValidator" /> 
    <a4j:support event="onblur" reRender="email_id, messages" oncomplete="setAnchor();"       
     status="status4divCoverAll" ajaxSingle="true" /> 
</h:inputText> 

これは、管理するセッションBeanです別のページ(url)から来ている場合はセッションからのBeanです。そのため、Beanはコンストラクタを再度実行します。

問題:私は無効な電子メールを書き、クラスをinputErrorClassに正しく設定しますが、別のページに移動しても(入力コンポーネントが無効なので)、最初のクラスに戻ると、クラスはinputErrorClass。

+0

が、これはEJBのように、本当に "セッションBean" となっていますか?または、「セッションスコープのマネージドBean」を意味しますか?アノテーションを見ることができないと、それは難しいです。 –

+0

セッションスコープのマネージドBeanです.JSFバージョンは1.2です。 –

+0

何のデバッグをしましたか?あなたがページに戻ったとき、isEmailPrimariaValid()はtrueを返しますか? –

答えて

0

Seamを使用していますか?エラーがあるときに入力要素をスタイリングするための良い機能がいくつかあります。シーム2で

は、あなたが<s:decorate>タグを使用することができます:シーム3ではhttp://docs.jboss.org/seam/2.2.0.GA/reference/en-US/html/controls.html#d0e28688

を、あなたはUIInputContainerと複合コンポーネントを使用することができます。http://jerryorr.blogspot.com/2011/10/replacement-for-sdecorate-in-seam-3.html

あなたはSeamに使用していない場合は...よく、 Seamのソースコードを見て、の内容を確認することができます。

+0

私は継ぎ目を使わないので、ソースコードを読むのがより難しくなると思います。バリデータによって変更されたコンポーネントの状態を "ちょうど"再初期化する必要があります。 –

+0

私は、コンポーネントのstyleClass属性を手動で変更することは、その方法ではないと思います。下記の@dcernahoschiリンクを参照してください。 –

0
+0

私はこのアプローチを試みましたが、問題は残っています...ページを変更して最初のものに戻ると、入力コンポーネントにはエラークラスが残っています。私は(コンストラクタ内で)input.isValidをtrueに初期化しなければならないと思うが、どうすればよいか分からない!その段階ではviewRootにアクセスできません。 –

+0

あなたのSessionBeanや.xhtmlの関連するセクションのようなコードをいくつか投稿することをお勧めします(これでisValidのチェックが追加されました)。 –

+0

もっと簡単な方法:http://stackoverflow.com/a/14457883/1460591 – YouYou