2014-07-04 42 views
4

我有如下0833 888 999如何顯示格式化的聯繫電話號碼?

The answer that Rachana offered blew是少數國家真實的,但不是所有的國傢俱有價值,如0833888999,我想字段格式被叫電話號碼。

因此, 我使用this Google library來格式化來自不同國家的聯繫號碼;然而,問題在於,在數據庫中保留聯繫人號碼後,我無法在數據庫中搜索聯繫人號碼,例如,圖書館可能會以不同格式格式化不同國家/地區的聯繫人號碼,例如在它們之間添加空格或「 - 」無法找到它們。

+18182223333 >>> +1 818-222-3333 
+441135558888 >>> +44 113 555 8888 

休眠

.add(Restrictions.ilike("user.phone","+18182223333"); 
+0

爲什麼你認爲該轉換器用戶希望將手機視爲格式化數字,並按逗號分組? –

+1

+1爲你的嘗試:) – rachana

+0

@RomanC然後不想用逗號看到它們!他們希望看到他們分組。 – Jack

回答

3

試試這個

<s:property value="getText('{0,number,0### ### ###}',{phone})"/> 

其中,phone=0833888999

希望這將有助於你也看到Using Struts2 Tags to Formatting Numbers

您將獲得有關格式化

+0

+1鏈接:) –

+0

從鏈接問題複製粘貼。 –

2

我認爲你應該保持原電話號碼,號碼清晰的概念(例如0833888999)在數據庫中,它是相應格式化的查看責任。

你可以有一個單獨的表「country_phone_format」拿着COUNTRY_IDphone_format,因此您同時擁有原始數據和格式正確顯示,你可以作爲一個@ManyToOne實體獲取phone_format它進入視圖。

PhoneFormat可以很容易地與第二級緩存一起緩存,因爲它們應該很少被修改。

+0

問題是,我應該找到一種方法來查找世界各地所有國際號碼的模式;不過,就我而言,我可以將任務委託給Google。 – Jack

+1

是的,但是一旦你找到了模式,你可以將它保存到數據庫,所以下一次你不必訪問任何外部服務,因爲你可以依靠自己的數據庫。 –

+0

我明白了,那麼如何從原始數字和格式化數字中找出模式是什麼?此外,在這種情況下,我不需要將模式保留在數據庫中,我可以將所有數字傳遞給Google以使其格式化;而不是將模式保存在數據庫中並將其格式化到我的服務器上。這種方法的問題是,如果它要顯示一長串結果,它會影響系統的性能,例如。系統的1000個用戶列表以及他們的電話號碼。 – Jack

2

就像Vlad提到的那樣,您應該將原始電話號碼(例如0833888999)保存在數據庫中(或者如果您願意,可以將其保存爲國家和地區代碼),並且將相應的格式設置爲視圖。

您可以使用Type Conversion轉換成您希望的格式 - 並利用您提到的谷歌庫。像下面的內容可以讓你開始(簡稱只是爲了得到它的要點):

public class MyConverter extends StrutsTypeConverter { 
    public Object convertFromString(Map context, String[] values, Class toClass) { 
     String phoneNr = values[0] 
     MyPhoneObject phone = googleLibrary.doYourMagic(phoneNr); 
     return phone; 
    } 

    public String convertToString(Map context, Object o) { 
     googleLibrary.parseString(((MyPhoneObject)o).rawPhoneNr()); 
    } 
} 

不要忘記註冊在xwork-conversion.properties

my.PhoneObject=path.to.MyConverter