如何格式化从前端命令对象获取的值。
它是一个来自数据库的SSN值,没有任何"-"
(连字符)。如何转换?
示例:将123456789
转换为123-45-6789
。在backingbean中,这个字段也是一个Int
。
创建一个自定义属性编辑器怎么样?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以匹配您的格式。
如何使用fmt:substring