Minha classe modelo nao recebe data de um datepicker

5 respostas
renatorudolf

Boa tarde,

Como faço pra gravar uma determinada data no banco utilizando o datepicker + Struts 2 ?

Data de finalizacao:<br />
<minhaTag:campoData id="dataFinalizacao" />

minha tagfile:

<%@ tag language="java" pageEncoding="UTF-8"%>

<%@ attribute name="id" required="true" %>

<input type="text" id="${id}" name="${id}" />

<script type="text/javascript">

$(function() {
	$( "#${id}" ).datepicker({
		changeMonth: true,
		changeYear: true,
		dateFormat: 'dd/mm/yy'
	});
});
</script>

Apos escolher a data no datepicker, clico no botao enviar e a data permanece no banco como null.

ai se faço:

Data de finalizacao:<br />
<minhaTag:campoData id="tarefa.dataFinalizacao" />

o datepicker nao aparece.

Alguem pode dar uma força ?

5 Respostas

R

Estou com esse mesmo problema.

M

Idem

paulolimac

Também estou com a mesma impossibilidade.

Seguindo a apostila da Caelum, consegui implementar o datepicker no capítulo 8 com sucesso e sem problemas.

Mas no capítulo 11 (no tópico 11.16, pág.147) não tive sucesso.

Consigo fazer a alteração da "dataFinalização" digitando no campo. Mas o datepicker não surge.

Coloco abaixo os códigos do JSP, da tag, e do console do firefox.

Caso precisem, posto demais código (lógica, apache-log etc) apesar de não disparar erros e a lógica se apresentar normal.

Na minha opinião, o problema deve estar:

[list]Na tag (ou na chamada dela pelo JSP), algo relacionado ao modo de escrita dos id="${id}", name="${id}".[/list]
[list]Ou ainda, no $("${id}").datepicker, algo relacionado ao modo de escrita/chamada do campo como "dataFinalizacao" ou "tarefa.dataFinalizacao".
[/list]
Como pesquisei, mas não consegui encontrar informação que resolvesse, posto aqui no fórum.

Agradeço quem se propor na ajuda.

Segue o código:

campoData.tag
<%@ attribute name="id" required="true" %>

<input type="text" id="${id}" name="${id}" />

<script type="text/javascript">
	$("${id}").datepicker({
		dateFormat: "dd/mm/yy",
		changeMonth: true,
		changeYear: true
	});
	
</script>
Mostra.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib tagdir="/WEB-INF/tags" prefix="caelum" %>

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Mostra</title>
		<link type="text/css" href="resources/css/smoothness/jquery-ui-1.8.21.custom.css" rel="stylesheet">
		<script type="text/javascript" src="resources/js/jquery-1.7.2.min.js"></script>
		<script type="text/javascript" src="resources/js/jquery-ui-1.8.21.custom.min.js"></script>
	</head>
	<body>
		
		<h3>Altera tarefa - ${tarefa.id}</h3>
		
		<form action="alteraTarefa" method="post">
		
			<input type="hidden" name="id" value="${tarefa.id}" />
			
			Descrição:<br />
			
			<textarea name="descricao" rows="5" cols="100">${tarefa.descricao}</textarea>
			<br />
			
			Finalizado? <input type="checkbox" name="finalizado" value="true" ${tarefa.finalizado?'checked':''} /> <br />
			
			 
			Data de finalização com tag: <caelum:campoData id="dataFinalizacao" />
			<br />
			
			
			<!-- 
			finalização: <input type="text" name="dataFinalizacao"	value="<fmt:formatDate value="${tarefa.dataFinalizacao.time}" pattern="dd/MM/yyyy" />" />
			-->
			<br />
			
			<input type="submit" value="Alterar">
			
		</form>

	</body>
</html>

Console do firefox:

[20:55:50.652] GET http://localhost:8080/Caelum.Fj21-3-Tarefas/mostraTarefa?id=5 [HTTP/1.1 200 OK 134ms]
[20:55:50.800] Propriedade desconhecida ?zoom?.  Declaração ignorada. @ http://localhost:8080/Caelum.Fj21-3-Tarefas/resources/css/smoothness/jquery-ui-1.8.21.custom.css:18
[20:55:50.800] Erro no processamento do valor de ?filter?.  Declaração ignorada. @ http://localhost:8080/Caelum.Fj21-3-Tarefas/resources/css/smoothness/jquery-ui-1.8.21.custom.css:19
[20:55:50.802] Propriedade desconhecida ?-moz-border-radius-topleft?.  Declaração ignorada. @ http://localhost:8080/Caelum.Fj21-3-Tarefas/resources/css/smoothness/jquery-ui-1.8.21.custom.css:280
[20:55:50.802] Propriedade desconhecida ?-moz-border-radius-topright?.  Declaração ignorada. @ http://localhost:8080/Caelum.Fj21-3-Tarefas/resources/css/smoothness/jquery-ui-1.8.21.custom.css:281
[20:55:50.802] Propriedade desconhecida ?-moz-border-radius-bottomleft?.  Declaração ignorada. @ http://localhost:8080/Caelum.Fj21-3-Tarefas/resources/css/smoothness/jquery-ui-1.8.21.custom.css:282
[20:55:50.802] Propriedade desconhecida ?-moz-border-radius-bottomright?.  Declaração ignorada. @ http://localhost:8080/Caelum.Fj21-3-Tarefas/resources/css/smoothness/jquery-ui-1.8.21.custom.css:283
[20:55:50.802] Propriedade desconhecida ?-moz-border-radius?.  Declaração ignorada. @ http://localhost:8080/Caelum.Fj21-3-Tarefas/resources/css/smoothness/jquery-ui-1.8.21.custom.css:287
A

você já está utilizando jquery, apenas atrele o elemento ao ID do componente, e não da forma que você fez lançando um jstl como ID, ou, mesmo que isso seja necessário, aponte antes se é atrelado a uma classe ( adicionando .${id} ) ou se é um ID (adicionando #${id} ), isso que relaciona o elemento ao componente da tua página.

Esse é o exemplo do jqueryui, bem simples de entender, e o código fonte dele também.

&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
	&lt;meta charset="utf-8"&gt;
	&lt;title&gt;jQuery UI Datepicker - Default functionality&lt;/title&gt;
	&lt;link rel="stylesheet" href="../../themes/base/jquery.ui.all.css"&gt;
	&lt;script src="../../jquery-1.7.2.js"&gt;&lt;/script&gt;
	&lt;script src="../../ui/jquery.ui.core.js"&gt;&lt;/script&gt;
	&lt;script src="../../ui/jquery.ui.widget.js"&gt;&lt;/script&gt;
	&lt;script src="../../ui/jquery.ui.datepicker.js"&gt;&lt;/script&gt;
	&lt;link rel="stylesheet" href="../demos.css"&gt;
	&lt;script&gt;
	$(function() {
		$( "#datepicker" ).datepicker();
	});
	&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class="demo"&gt;
<p>Date: &lt;input type="text" id="datepicker"&gt;</p>
&lt;/div&gt;&lt;!-- End demo --&gt;


&lt;/body&gt;
&lt;/html&gt;
paulolimac
andre.froes:
você já está utilizando jquery, apenas atrele o elemento ao ID do componente, e não da forma que você fez lançando um jstl como ID, ou, mesmo que isso seja necessário, aponte antes se é atrelado a uma classe ( adicionando .${id} ) ou se é um ID (adicionando #${id} ), isso que relaciona o elemento ao componente da tua página.

Andre, obrigado pelo retorno.

Consegui corrigir o erro: faltou o jogo da velha # no meu campoData.tag:

$("${id}").datepicker({

//foi corrigida para:

$("#${id}").datepicker({

Já tinha lido a página do datepicker, e até poderia ter visto que nela existe o jogo-da-velha.

Mas o que me ajudou foi a explicação entre a diferença entre estes: $ # (cifrão e jogo-da-velha) lida aqui: [url]http://docs.oracle.com/javaee/6/tutorial/doc/bnahr.html[/url]

Caso alguem se interesse em fazer busca pelo $ e # na Expression Language (EL), procure pelos termos: "Immediate and Deferred Evaluation Syntax" . O $ refere-se ao immediate, e o # refere-se ao deferred.

Andre, novamente, obrigado pela ajuda.

Criado 30 de maio de 2011
Ultima resposta 22 de jun. de 2012
Respostas 5
Participantes 5