2011-06-02 30 views
0

如何格式化從前端命令對象中獲取的值。格式前端的Spring CommandObject變量

它是一個來自DB沒有任何"-"(連字符)的SSN值。我該如何轉換?

示例:將123456789轉換爲123-45-6789。另外在後臺bean這個字段是Int

回答

0

如何創建一個自定義屬性編輯器? Spring使用自定義屬性編輯器來格式化特殊數據,如SSN。

的IntegerPropertyEditor看起來是這樣的:

package com.pnt.common.propertyeditor; 

import java.beans.PropertyEditorSupport; 
import com.pnt.util.number.NumUtils; 

public class IntegerPropertyEditor extends PropertyEditorSupport { 



//private static final Log logger = LogFactory.getLog(IntegerPropertyEditor.class); 





public void setValue(Object value) { 

    if (value==null) { 
     super.setValue(null); 
    } 

    else if (value instanceof Integer) { 
     super.setValue(value); 
    } 

    else if (value instanceof String) { 
     setValue(NumUtils.stringToInteger((String)value)); 
    } 

    else { 
     super.setValue(NumUtils.stringToInteger(value.toString())); 
    }  
} 


public void setAsText(String text) { 
    setValue(NumUtils.stringToInteger(text.replaceAll(" ", ""))); 
} 


public String getAsText() { 
    Integer value = (Integer)getValue(); 
    if (value != null){ 
     String t = value.toString(); 
     int k = 1; 
     for (int i = t.length() - 1; i >= 0; i--) { 
      if (k % 3 == 0 && i != 0) 
       t = t.substring(0, i) + " " + t.substring(i); 
      k++; 
     } 
     return t; 

    } 
    else 
     return ""; 
} 
} 

而且你必須在控制器的initBinder()方法來註冊吧:

protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder){ 
    try { 
     binder.registerCustomEditor(Integer.class, "ssnField", new IntegerPropertyEditor()); 
    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 


} 

其中 「ssnField」 是字段的名稱。

現在您只需調整PropertyEditor以匹配您的格式。

+0

編輯郵件時,請檢查右欄,郵件格式規則在那裏。請檢查編輯器工具欄,它有工具提示。最後請檢查編輯器下方的預覽區域,它會顯示消息如何結束。 – BalusC 2011-06-02 12:14:56