Bernad Ali
Bernad Ali

Reputation: 1729

Trim String in JSF h:outputText value

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

Upvotes: 3

Views: 10421

Answers (3)

Jasper de Vries
Jasper de Vries

Reputation: 20168

If your string comes from a bean you can add an extra getter to return the trimmed version:

private String myString = "A-B-A03";

public String getMyStringTrimmed()
{
  // You could also use java.lang.String.substring with some ifs here
  return org.apache.commons.lang.StringUtils.substring(myString, -3);
}

Now you can use the getter in your JSF page:

<h:outputText value="#{myBean.myStringTrimmed}"/>

Upvotes: 2

BalusC
BalusC

Reputation: 1108642

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");
    }

}

Upvotes: 6

f_puras
f_puras

Reputation: 2505

You can try and use the fn:substring functions from JSTL:

${fn:substring('A-B-A03', 4, 7)}

Upvotes: 4

Related Questions