| Author |
Message |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/10/2005 04:05:32
|
boaglio
![[Avatar]](/images/avatar/3416a75f4cea9109507cacd8e2f2aefc.jpg)
Joined: 28/09/2005 11:05:16
Messages: 299
Location: Sao Paulo - Brazil
Offline
|
Oi,
Estou fazendo uma app usado no VOFilter com uma classe.
Dentro da action ele vem preenchida do JSP com quase todos
os campos, exceto o campo data (que é java.sql.Date),
que eu preencho no formato YYYY-MM-DD, mas sempre vem NULL.
Isso era esperado mesmo? Preciso usar String e no DAO
converter a data?
Estou usando mentawai 1.1.1 .
|
http://www.boaglio.com
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/10/2005 13:18:27
|
saoj
Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline
|
Sim, isso é esperado, pois o seu objeto espera um Date e tá vindo um String.
Pra resolver isso é simples: Antes do VOFilter vc coloca um ConvertionFilter para converter. Detalhe: Convertion joga exception se nao conseguir converter, logo vc precisa tb de um ValidationFilter para quando for converter vc ter certeza que é convertível.
No MyBooks isso é ilustrado no cadastro de livros.
|
Sergio Oliveira
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/10/2005 17:20:20
|
boaglio
![[Avatar]](/images/avatar/3416a75f4cea9109507cacd8e2f2aefc.jpg)
Joined: 28/09/2005 11:05:16
Messages: 299
Location: Sao Paulo - Brazil
Offline
|
Legal Sérgio,
Eu dei uma olhada e testei o DateConverter, mas ele só tem construtor para os estilos do DateFormat (SHORT ,MEDIUM ,LONG e FULL).
Tem como definir o meu estilo direto no conversor?
Algo assim:
Code:
public void initConverters() {
add("dataPublic", new DateConverter("YYYY-MM-DD"));
}
|
http://www.boaglio.com
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/10/2005 18:33:24
|
saoj
Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline
|
Tem razão. Então vc vai ter que criar o seu próprio Converter, o que é muito simples.
Vc pode extender BasicConverter ou LocaleConverter.
No caso de datas, faz sentido usar o Locale para converter, pois cada lingua tem o seu tipo de data. Se esse for o seu caso extenda o LocaleConverter.
Se for um caso específico para um formato em questão, extenda o BasicConverter.
Nada te impede também de implementar a interface Converter.
Veja o código fonte do DateConverter para ter uma idéia.
|
Sergio Oliveira
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/10/2005 21:12:27
|
boaglio
![[Avatar]](/images/avatar/3416a75f4cea9109507cacd8e2f2aefc.jpg)
Joined: 28/09/2005 11:05:16
Messages: 299
Location: Sao Paulo - Brazil
Offline
|
Então... fiz o seguinte esquema:
Code:
public class MySQLDateConverter extends LocaleConverter {
private final String MYSQL_MASK="yyyy-MM-dd";
public Object convert(Object value, Locale loc) throws ConversionException {
if (value instanceof String) {
String s = (String) value;
SimpleDateFormat sdf = new SimpleDateFormat(MYSQL_MASK,loc);
sdf.setLenient(false);
try {
return sdf.parse(s);
} catch(ParseException e) {
throw new ConversionException(e);
}
} else {
throw new ConversionException("MySQLDateConverter can only parse strings: " + value.toString());
}
}
}
E depois:
Code:
public class NovidadeConversionFilter extends ConversionFilter {
public void initConverters() {
add("dataPublic", new MySQLDateConverter());
}
Mas mesmo assim no VO a data "dataPublic" continua vindo nula...
Eu debuguei o convertor e lá chega e retorna a DAta certinho, mas
por algum motivo na Action chega nula
|
http://www.boaglio.com
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/10/2005 22:25:53
|
saoj
Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline
|
O problema está no VOFilter na hora de colocar esse atributo no campo dataPublic, certo ?
Ele não está colocando, certo ?
Se for isso coloca aqui o código do objeto que está recebendo esse valor, isto é, o objeto que o VOFilter está criando com os valores do input.
Ou vc está injetando direto no action esse valor ?
|
Sergio Oliveira
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/10/2005 23:01:45
|
boaglio
![[Avatar]](/images/avatar/3416a75f4cea9109507cacd8e2f2aefc.jpg)
Joined: 28/09/2005 11:05:16
Messages: 299
Location: Sao Paulo - Brazil
Offline
|
saoj wrote:
O problema está no VOFilter na hora de colocar esse atributo no campo dataPublic, certo ?
Ele não está colocando, certo ?
Isso.
saoj wrote:
Se for isso coloca aqui o código do objeto que está recebendo esse valor, isto é, o objeto que o VOFilter está criando com os valores do input.
Ou vc está injetando direto no action esse valor ?
É na Action mesmo, tem uma innerAction "novo" que chama esse método:
Code:
public String novo() throws Exception {
NovidadeDAO dao = NovidadeDAO.getInstance();
try {
dao.adiciona(vo);
} catch (DAOException e) {
logger.error("erro no cadastro!",e);
}
return SUCCESS;
}
E no loadActions tá assim:
Code:
public void loadActions() {
// novidade
ActionConfig ac = new ActionConfig("/cadastro/novidade", NovidadeAction.class,"novo");
ac.addConsequence(NovidadeAction.SUCCESS, new Forward("/cadastro/novidade.jsp"));
ac.addConsequence(NovidadeAction.ERROR, new Forward("/cadastro/novidade.jsp"));
ac.addFilter(new NovidadeValidation());
ac.addFilter(new NovidadeConversionFilter());
ac.addFilter(new VOFilter(NovidadeVO.class, "vo"));
ac.addFilter(new InjectionFilter(true));
addActionConfig(ac);
}
|
http://www.boaglio.com
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/10/2005 06:42:59
|
saoj
Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline
|
O dataPublic dentro de NovidadeVO está ficando NULL, o resto está ok, certo ?
Coloca o código do NovidadeVO aqui, please.
|
Sergio Oliveira
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/10/2005 08:18:54
|
boaglio
![[Avatar]](/images/avatar/3416a75f4cea9109507cacd8e2f2aefc.jpg)
Joined: 28/09/2005 11:05:16
Messages: 299
Location: Sao Paulo - Brazil
Offline
|
Isso mesmo, os outros campos vem preechidos.
o VO é esse:
Code:
import java.io.Serializable;
import java.sql.Date;
public class NovidadeVO implements Serializable {
private static final long serialVersionUID = 3256720667452782647L;
private int id;
private Date dataPublic;
private String link;
private int tipo;
private String texto;
private UsuarioVO usuarioVO=new UsuarioVO();
--- getters e setters
|
http://www.boaglio.com
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/10/2005 08:35:12
|
saoj
Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline
|
O erro é o seguinte:
Vc está tentando injetar um java.util.Date num java.sql.Date.
java.sql.Date é um java.util.Date mas o oposto não é verdadeiro.
|
Sergio Oliveira
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/10/2005 20:48:13
|
boaglio
![[Avatar]](/images/avatar/3416a75f4cea9109507cacd8e2f2aefc.jpg)
Joined: 28/09/2005 11:05:16
Messages: 299
Location: Sao Paulo - Brazil
Offline
|
saoj wrote:
O erro é o seguinte:
Vc está tentando injetar um java.util.Date num java.sql.Date.
java.sql.Date é um java.util.Date mas o oposto não é verdadeiro.
Bingo!
Era isso mesmo, agora tá funcionando!
|
http://www.boaglio.com
|
|
|
 |
|
|