2
votes

Hope you all will be fine. The scenerio is I have a form on which there is name inputText field. I want that if user type ' in the name then it is replaced by //. I have made the replace function. But I don't know that how can I do it using ajax. Like if I have input field like this

<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" />

Now I want that if user types 'Basit'Mahmood'Ahmed' in the name field then on focus looses the value becomes //Basit//Mahmood//Ahmed//. So when user presses on submit button then the //Basit//Mahmood//Ahmed// should be posted to the server, not the 'Basit'Mahmood'Ahmed'.

How can I do it in JSF 2.0?

1

1 Answers

1
votes

You need to create a converter.

E.g.

@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;
    }

}

with

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

The getAsObject() will run during validations phase and do the desired conversion before the model value is been updated and the view is been re-rendered.