Trim String in JSF h:outputText value

jsf, trim

Solution

You could use a `Converter` for this job. JSF has several builtin converters, but no one suits this very specific functional requirement, so you'd need to create a custom one.

It's relatively easy, just implement the `Converter` interface according its contract:

public class MyConverter implements Converter {

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object modelValue) throws ConverterException {
        // Write code here which converts the model value to display value.
    }

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String submittedValue) throws ConverterException {
        // Write code here which converts the submitted value to model value.
        // This method won't be used in h:outputText, but in UIInput components only.
    }

}

Provided that you're using JSF 2.0 (your question history confirms this), you can use the `@FacesConverter` annotation to register the converter. You can use the (default) `value` attribute to assign it a converter ID:

@FacesConverter("somethingConverter")

(where "something" should represent the specific name of the model value you're trying to convert, e.g. "zipcode" or whatever it is)

so that you can reference it as follows:

<h:outputText value="#{bean.something}" converter="somethingConverter" />

For your particular functional requirement the converter implementation can look like this (assuming that you actually want to split on `-` and return only the last part, which makes so much more sense than "display last 3 characters"):

@FacesConverter("somethingConverter")
public class SomethingConverter implements Converter {

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object modelValue) throws ConverterException {
        if (!(modelValue instanceof String)) {
            return modelValue; // Or throw ConverterException, your choice.
        }

        String[] parts = ((String) modelValue).split("\\-");
        return parts[parts.length - 1];
    }

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String submittedValue) throws ConverterException {
        throw new UnsupportedOperationException("Not implemented");
    }

}

Problem

Is there any way to string JSF h:outPutTextValue ? my string is A-B-A03 ,i just want to display last 3 characters .does openfaces have any avialable function to do this ? Thanks

Original source