格式化JSF电话号码

问题描述 投票:6回答:2

我将电话号码存储为数据库中的字符串。它将被存储为“1234567890”。我想向用户显示它并将其格式化为(12)3456-7890如何使用JSF 2.0执行此操作?我尝试了以下,但它不起作用:

<h:outputText value="1234567890">
<f:convertNumber pattern="(##) ####-####"/>
</h:outputText>
jsf
2个回答
7
投票

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

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.