creditcardconverter.java

来自「struts框架的jsf组件的核心实用例子集合」· Java 代码 · 共 72 行

JAVA
72
字号
package com.corejsf;import javax.faces.application.FacesMessage;import javax.faces.component.UIComponent;import javax.faces.context.FacesContext;import javax.faces.convert.Converter;import javax.faces.convert.ConverterException;public class CreditCardConverter implements Converter {   public Object getAsObject(FacesContext context, UIComponent component,         String newValue) throws ConverterException {      StringBuffer buffer = new StringBuffer(newValue);      boolean foundInvalidCharacter = false;      char invalidCharacter = '\0';      int i = 0;      while (i < buffer.length() && !foundInvalidCharacter) {         char ch = buffer.charAt(i);         if (Character.isDigit(ch))            i++;         else if (Character.isWhitespace(ch))            buffer.deleteCharAt(i);         else {            foundInvalidCharacter = true;            invalidCharacter = ch;         }      }      if (foundInvalidCharacter) {         FacesMessage message = com.corejsf.util.Messages.getMessage(               "com.corejsf.messages", "badCreditCardCharacter",               new Object[]{ new Character(invalidCharacter) });         message.setSeverity(FacesMessage.SEVERITY_ERROR);         throw new ConverterException(message);      }      return new CreditCard(buffer.toString());   }   public String getAsString(FacesContext context, UIComponent component,         Object value) throws ConverterException {      // length 13: xxxx xxx xxx xxx      // length 14: xxxxx xxxx xxxxx      // length 15: xxxx xxxxxx xxxxx      // length 16: xxxx xxxx xxxx xxxx      // length 22: xxxxxx xxxxxxxx xxxxxxxx      String v = value.toString();      int[] boundaries = null;      int length = v.length();      if (length == 13)         boundaries = new int[]{ 4, 7, 10 };      else if (length == 14)         boundaries = new int[]{ 5, 9 };      else if (length == 15)         boundaries = new int[]{ 4, 10 };      else if (length == 16)         boundaries = new int[]{ 4, 8, 12 };      else if (length == 22)         boundaries = new int[]{ 6, 14 };      else         return v;      StringBuffer result = new StringBuffer();      int start = 0;      for (int i = 0; i < boundaries.length; i++) {         int end = boundaries[i];         result.append(v.substring(start, end));         result.append(" ");         start = end;      }      result.append(v.substring(start));      return result.toString();   }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?