2011-11-23 6 views
2

あなたはすべてうまくいくと思います。私はinputTextフィールドの名前があるフォームを持っています。私は、ユーザ名が'の場合は、//に置き換えられます。私はreplace関数を作った。しかし、私はそれをどうやってajaxを使って行うことができるのか分かりません。 私はこのフォーカスルーズとサーバーへの送信前にinputText値を変更する方法

<h:inputText id="name" value="#{user.name}"> 
    <f:ajax event="blur" render="nameError name"/> 
</h:inputText> 
<h:message for="name" id="nameError" style="color: red" /> 

のように入力フィールドを持っている場合と同じように今、私はその後、焦点の名前フィールドに、ユーザーの種類'Basit'Mahmood'Ahmed'が失った場合、値は//Basit//Mahmood//Ahmed//になったことをしたいです。したがって、ユーザがサブミットボタンを押すと、'Basit'Mahmood'Ahmed'ではなく//Basit//Mahmood//Ahmed//がサーバに送信されます。

JSF 2.0でどうすればいいですか?

答えて

1

コンバータを作成する必要があります。

など。

<h:inputText id="name" value="#{user.name}" converter="userNameConverter"> 

getAsObject()

@FacesConverter("userNameConverter") 
public class UserNameConverter implements Converter { 

    @Override 
    public String getAsString(FacesContext context, UIComponent component, Object value) { 
     return (String) value; 
    } 

    @Override 
    public Object getAsObject(FacesContext context, UIComponent component, String value) { 
     return (value != null) ? value.replaceAll("'", "//") : null; 
    } 

} 

は検証フェーズ中に実行され、モデル値が更新され、ビューが再レンダリングされる前に、所望の変換を行います。

+0

こんにちは、ありがとう:)もう一つ。私はこのようなコードを使用しています​​ ​​あなたのポストにあなたが言及するあなたの変換器。値の再実行時にメッセージが次の列に表示されるようにしたい。 列。どうすればいいですか?コンバータの例外を投げることによって? Thanks – Basit

+1

'context.addMessage(component.getClientId()、message)'を使用してください。 – BalusC

+0

PublicオブジェクトgetAsObject(FacesContextコンテキスト、UIComponentコンポーネント、文字列値){ context.addMessage(component.getClientId()、新しいFacesMessage( "こんにちはr")); return(value!= null)? value.replaceAll( "'"、 "//"):null; } // end of getAsObject()これは動作しています。どうもありがとうございました – Basit

関連する問題