格式化JSF电话号码

时间:2013-11-18 01:50:47

标签: jsf

我将电话号码存储为数据库中的字符串。它将被存储为“1234567890”。 我想将其显示给用户并将其格式化为(12)3456-7890 我怎么能用JSF 2.0做到这一点? 我尝试了以下方法,但它不起作用:

<h:outputText value="1234567890">
<f:convertNumber pattern="(##) ####-####"/>
</h:outputText>

2 个答案:

答案 0 :(得分:6)

<f:convertNumber>使用了DecimalFormat,并未考虑电话号码。

您需要创建自定义Converter并使用常规getAsString()方法(例如String和朋友)在substring()实施中执行所需的工作。

@FacesConverter("phoneConverter")
public class PhoneConverter implements Converter{

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object modelValue) {
        String phoneNumber = (String) modelValue;
        StringBuilder formattedPhoneNumber = new StringBuilder();

        // ...

        return formattedPhoneNumber.toString();
    }

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String submittedValue) {
        // Conversion is not necessary for now. However, if you ever intend to use 
        // it on input components, you probably want to implement it here.
        throw new UnsupportedOperationException("Not implemented yet");
    }

}

按如下方式使用:

<h:outputText value="1234567890" converter="phoneConverter" />

答案 1 :(得分:0)

正如BalusC回答的那样,您需要一个转换器来这样做。不过,我建议您:不编写自己的格式逻辑,而使用类似libphonenumber的库。这将为您完成所有艰苦的工作。此处的最佳做法是将电话号码存储在模型中的E.164 format中。