Portanto, se você deseja garantir que o sistema converta corretamente o tipo Date, você deve escrever uma classe de conversão de tipo global para realizar a conversão de tipo entre Date e String.
Copie o código do código da seguinte forma:
pacote com.great.util;
importar java.text.DateFormat;
importar java.text.SimpleDateFormat;
importar java.util.Date;
importar java.util.Map;
importar com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
classe pública DateConverter estende DefaultTypeConverter {
final estático privado DateFormat[] ACCEPT_DATE_FORMATS = {
novo SimpleDateFormat("dd/MM/aaaa"),
novo SimpleDateFormat("aaaa-MM-dd"),
new SimpleDateFormat("yyyy/MM/dd") }; //Suporta formato de data para conversão
@Substituir
public Object convertValue(Contexto do mapa, valor do objeto, classe toType) {
if (toType == Date.class) { //Quando o navegador envia para o servidor, converte String em Date
Data data = nulo;
String dataString = null;
String[] params = (String[])valor;
dateString = params[0];//Obtém a string de data
para (formato DateFormat: ACCEPT_DATE_FORMATS) {
tentar {
return format.parse(dateString);//Percorre os formatos de data suportados e converte-os
} catch(Exceção e) {
continuar;
}
}
retornar nulo;
}
else if (toType == String.class) { //Quando o servidor enviar para o navegador, execute a conversão do tipo Data em String
Data data = valor (Data);
return new SimpleDateFormat("yyyy-MM-dd").format(date);//O formato de saída é yyyy-MM-dd
}
retornar nulo;
}
}
Crie o arquivo xwork-conversion.properties no diretório raiz e adicione a seguinte instrução nele para registrar o conversor de tipo
java.util.Date=com.great.util.DateConverter
Entre eles, com.great.util.DateConverter é o nome completo da classe de conversão de data, incluindo o namespace.
E então muitas pessoas terminam.
Mas ainda não consegui, o sistema reporta um erro
"ERRO (CommonsLogger.java:27) - Erro de registro de conversão"
"java.lang.ClassNotFoundException: com.great.util.DateConverter"
Falha ao registrar o conversor de tipo?
Após uma inspeção cuidadosa, descobri que há um espaço extra após "java.util.Date=com.great.util.DateConverter"! A verdade é revelada. Retire os espaços e corra novamente, sucesso!