JSON e VRaptor não funciona

Boa noite parceiros,

Estou com um problema em minha aplicação, pois não consigo puxar informações na base e colocar nos campos.

Pagina:

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
	<head>

		<c:import url="/includes/imports.jsp" />

		<script type="text/javascript">
function consultar(id) {
	$.getJSON('<c:url value="/clinico/editaProcedimento/" />' + id, function(
			json) {
		$('#teste').val(json.Procedimento.nome);
	})
}
</script>


		<title>Procedimentos</title>

	</head>
	<body>

		<c:import url="/includes/menu.jsp"></c:import>
<br><BR/>


		
		<div id="principal">

			<div id="actionBar">
				<input type="text" name="pesquisa" value="Pesquisa por nome" />
				<br />
				<button>
					Pesquisar
				</button>
				<br />

				<c:forEach items="${procedimentoList}" var="procedimento">
					<div class="pesquisa">
						<a onclick="consultar(${procedimento.id})">${procedimento.nome}</a>
					</div>
				</c:forEach>

			</div>
			<div id="conteudo">
				<fieldset>
					<form action="<c:url value="/clinico/salvaProcedimento" />">

						<button>
							Salvar
						</button>
						<button>
							Voltar
						</button>
						<br />
						<br />

						<table>


							<tr>
								<td>
									ID
								</td>
								<td>
									<input type="text" name="procedimento.id">
								</td>
							</tr>
							<tr>
								<td>
									Nome
								</td>
								<td>
									<input type="text" name="procedimento.nome">
								</td>
							</tr>
							<tr>
								<td>
									Valor
								</td>
								<td>
									<input type="text" name="procedimento.valor">
								</td>
							</tr>
							<tr>
								<td>
									Especialidade
								</td>
								<td>
									<select name="procedimento.especialidade">
										<option>
											Teste
										</option>
										<option>
											Teste2
										</option>
									</select>
								</td>
							</tr>

							<tr>
								<td>
									Descrição
								</td>
								<td>
									<textarea cols="15" rows="4" name="procedimento.descricao"></textarea>
								</td>
							</tr>
						</table>

					</form>
				</fieldset>
			</div>
		</div>


		<c:import url="/includes/dock.jsp" />

	</body>
</html>

Controller

	@Path("/clinico/editaProcedimento/{procedimento.id}")
	public void editaProcedimento(Procedimento procedimento) {
		Procedimento procedimentoProcurado = new ProcedimentoDao().buscaPorId(procedimento);
		result.use(json()).from(procedimentoProcurado).serialize();
	}

Alguem pode me ajudar?

Obrigado!

Fmgasparino

Tente:

$('#teste').val(json.procedimentoProcurado.nome);

se não funcionar tente procedimento com p minúscula.

Não faltou: id=“teste”, no formulário?

[quote=Lagaffe]Fmgasparino

Tente:

$('#teste').val(json.procedimentoProcurado.nome);

se não funcionar tente procedimento com p minúscula.

Não faltou: id=“teste”, no formulário?[/quote]

Funcionou cara, obrigado!,

Agora o problema fica em trazer o dado correto…

Este código esta incorreto?

public Procedimento buscaPorId(Procedimento procedimento) { return (Procedimento) this.session.load(Procedimento.class,procedimento.getId()); }

Obrigado

Aparentemente está certo tua chamada. Porém sempre que você tem um erro você deve sempre mandar para nós as mensagens de erro que aparecem no console, ou na ausencia de mensagens explicar melhor o comportamento.

Abraços

Fmgasparino

Parece que está certo. Qual o erro? Não traz nada ou o dado errado?

Eu costumo fazer da seguinte forma:

Usar @Component no Dao e receber o dao no construtor do controller.

No manual e nas apostilas tem exemplos.

Lagaffe, bem lembrado. Agora ví que ele constroi a DAO manualmente, sendo assim provavelmente a session do hibernate não está sendo “setada” corretamente e está ocorrendo um NullPointerException.

Pessoal,

Ontem comecei o Refactoring para deixar o vRaptor controlar a Session( SessionCreator), e criei o Dao ao instanciar p controller, assim:

	public ClinicoController(Result result,SessionCreator sessionCreator) {
		this.result = result;
		this.procedimentoDao = new ProcedimentoDao(sessionCreator.getInstance());

	}

Agora esta correto, não esta?

O erro era que não me retornava nada, criei um criteria uniqueResult, pode ser usado este?

Obrigado Pessoal!

Isso está errado. Dê uma olhada na documentação do Vraptor que lá explica como fazer. http://vraptor.caelum.com.br/documentacao/

Basicamente você precisa adicionar essas linhas no seu web.xml:

<context-param> <param-name>br.com.caelum.vraptor.packages</param-name> <param-value> br.com.caelum.vraptor.util.hibernate </param-value> </context-param>

E receber a Session pelo construtor da sua DAO assim:

public class ProcedimentoDao { public ProcedimentoDao(Session session) { [...] } }

E nos seus controllers:

public ClinicoController(Result result, ProcedimentoDao procedimentoDao) { [...] }