VRaptor - Formulário .jsp - Edit

<form action="<c:url value="/produtos/adiciona"/>">
    Nome:             <input type="text" name="produto.nome" /><br/>
    Descrição:    <input type="text" name="produto.descricao" /><br/>
    Preço:            <input type="text" name="produto.preco" /><br/>
    <input type="submit" value="Salvar" />
</form>

Galera eu achei esse codigo ai no site do VRaptor e achei bastante simples dessa forma, agora eu gostaria de fazer o mesmo com um formulário para edição, onde os dados a serem editados já estariam preenchidos.

Faz tempo que não faço nada em jsp, lembro que fiz um trabalho pra faculdade e usei a seguinte abordagem:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:jsp="http://java.sun.com/JSP/Page"
      xmlns:c="http://java.sun.com/jsp/jstl/core"
      xmlns:h="http://java.sun.com/html"/>

<jsp:directive.page contentType="text/html" pageEncoding="UTF-8"/>
<jsp:directive.page import="com.eescola.controller.*" />
<jsp:directive.page import="com.eescola.model.*" />
<jsp:directive.page import="java.util.ArrayList" />

<jsp:useBean id="atuPessoa" scope="session" class="com.eescola.controller.Pessoa"></jsp:useBean>

<%
     if(!session.isNew()){
           int cdPessoa = Integer.parseInt(request.getParameter("cdPessoa"));
           atuPessoa.setMatricula(cdPessoa);

           PessoaDAO dao = new PessoaDAO();

           ArrayList pessoaList = (ArrayList) dao.getListById(atuPessoa);

           request.setAttribute("pessoaList", pessoaList);
    }else{
           response.sendRedirect("../index.jsp");
    }

%>


<html>
    <body>

        <form id="container" name="formulario" action="update.jsp" method="post" onsubmit="return valida(this);">
         <h1>Editar Cadastro de Pessoa</h1>

          <c:forEach var="pessoa" items="${requestScope.pessoaList}">
        
               Matricula: <input type="text" name="matricula" value="${pessoa.matricula}" readonly="true" />
		   Nome : <input type="text" name="nome" value="${pessoa.nome}" />
		   Endereço: <input type="text" name="endereco" value="${pessoa.endereco}" />

          </c:forEach>

               <input type="submit" value="Salvar" name="salvar"  />
               <input type="reset" value="Limpar" name="limpar" />
	   </form>

    </body>


</html>

Eu lembro que tinha que pegar o id da pessoa por requisição, fazer a busca por essa pessoa preecher uma lista com os dados dessa pessoa, fazer o foreach para preencher o formulário.

Tem alguma outra forma de fazer esse mesmo trabalho, simples como o codigo que eu vi no site do VRaptor???

valeu :smiley:

Primeiro de tudo: não use scriptlets… não coloque código java dentro da jsp, você pode fazer isso dentro da lógica do VRaptor…

pra fazer o edit, você pode criar o seguinte método:

@Resource
public class PessoaController {
     
       public Pessoa edita(Long id) {
              return dao.load(id);
       }

       
}

e usar na jsp:

<form id="container" name="formulario" action="<c:url value="/pessoa/atualiza"/>" method="post" onsubmit="return valida(this);">
        <input type="hidden" name="pessoa.id" value="${pessoa.id}"/>
         <h1>Editar Cadastro de Pessoa</h1>
               Matricula: <input type="text" name="pessoa.matricula" value="${pessoa.matricula}" readonly="true" />
		   Nome : <input type="text" name="pessoa.nome" value="${pessoa.nome}" />
		   Endereço: <input type="text" name="pessoa.endereco" value="${pessoa.endereco}" />

               <input type="submit" value="Salvar" name="salvar"  />
               <input type="reset" value="Limpar" name="limpar" />
	   </form>

daí é só criar no controller um método atualiza, recebendo um parâmetro (Pessoa pessoa)

Opa lucascs, valeu mesmo.

Agora eu gostaria de tirar mais uma duvida, estou fazendo uns testes com VRaptor, pois vou fazer um trabalho pra faculdade e vou publicar no GAE, gostaria de saber se tem como usar o recurso do VRaptor que faz parte do pacote util, para o JPA EntityManager, no site diz:

Mais no GAE o arquivo xml de configuração o persistence-unit chama-se “transactions-optional”. Tem alguma forma de eu estar utilizando o utilitário do VRaptor para o GAE???

E também na documentação no site está:

@Override
protected void registerCustomComponents(ComponentRegistry registry) {
    registry.registry(EntityManagerCreator.class, EntityManagerCreator.class);
    registry.registry(EntityManagerFactoryCreator.class, 
                        EntityManagerFactoryCreator.class);
}

O certo não seria register em vez de registry??

@Override
protected void registerCustomComponents(ComponentRegistry registry) {
    registry.register(EntityManagerCreator.class, EntityManagerCreator.class);
    registry.register(EntityManagerFactoryCreator.class, 
                        EntityManagerFactoryCreator.class);
}

Por enquanto é isso. :smiley:

No site a documentação está muito clean, mas você pode ver o projeto blank para o vraptor no gae.
http://vraptor.caelum.com.br/documentacao/spring-joda-time-hibernate-e-google-app-engine/

corrigi os erros da documentação…

se você quiser trocar o nome do persistence unit basta, ao inves de registrar o EntityManagerFactoryCreator do VRaptor no custom provider, criar essa classe:

@Component
@ApplicationScoped
public class EntityManagerFactoryCreator implements ComponentFactory<EntityManagerFactory>{

	private EntityManagerFactory factory;

	@PostConstruct
	public void create() {
		factory = Persistence.createEntityManagerFactory("transactions-optional");
	}

	public EntityManagerFactory getInstance() {
		return factory;
	}

	@PreDestroy
	public void destroy() {
		factory.close();
	}

}

ou mudar o nome do persistence-unit para default no xml… você que sabe…
vou colocar para um próximo release um jeito mais fácil de trocar o persistence unit name…

[]'s

Blz lucascs, não abusando de sua boa vontade, gostaria de mais uma ajuda.

Como estou fazendo essa aplicação para o Google App Engine, estou tendo dificuldades, agora não sei se seria do ambiente do GAE ou erro meu mesmo, estou tendo o seguinte erro:


org.apache.jasper.JasperException: Unable to compile class for JSP
RequestURI=/

Caused by:

br.com.caelum.vraptor.view.ResultException: org.apache.jasper.JasperException: Unable to compile class for JSP
	at br.com.caelum.vraptor.view.DefaultPageResult.forward(DefaultPageResult.java:65)
	at br.com.caelum.vraptor.extra.ForwardToDefaultViewInterceptor.intercept(ForwardToDefaultViewInterceptor.java:52)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.download.DownloadInterceptor.intercept(DownloadInterceptor.java:57)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.OutjectResult.intercept(OutjectResult.java:58)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:62)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:83)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
	at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:39)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.multipart.MultipartInterceptor.intercept(MultipartInterceptor.java:74)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.core.URLParameterExtractorInterceptor.intercept(URLParameterExtractorInterceptor.java:35)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:58)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:59)
	at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:87)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:55)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:85)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
	at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
	at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:121)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
	at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:54)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
	at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:342)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
	at org.mortbay.jetty.Server.handle(Server.java:313)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506)
	at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:830)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381)
	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396)
	at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
Caused by: org.apache.jasper.JasperException: Unable to compile class for JSP
	at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:97)
	at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:346)
	at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:414)
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:472)
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
	at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
	at com.google.appengine.tools.development.PrivilegedJspServlet.access$101(PrivilegedJspServlet.java:23)
	at com.google.appengine.tools.development.PrivilegedJspServlet$2.run(PrivilegedJspServlet.java:59)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.google.appengine.tools.development.PrivilegedJspServlet.service(PrivilegedJspServlet.java:57)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093)
	at br.com.caelum.vraptor.core.DefaultStaticContentHandler.deferProcessingToContainer(DefaultStaticContentHandler.java:72)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:78)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
	at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:54)
	at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:268)
	at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)
	at br.com.caelum.vraptor.view.DefaultPageResult.forward(DefaultPageResult.java:63)
	... 56 more
Caused by: Error running javac.exe compiler
	at org.apache.tools.ant.taskdefs.compilers.DefaultCompilerAdapter.executeExternalCompile(DefaultCompilerAdapter.java:473)
	at org.apache.tools.ant.taskdefs.compilers.JavacExternal.execute(JavacExternal.java:47)
	at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:931)
	at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:757)
	at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:382)
	... 82 more
Caused by: java.io.IOException: Cannot run program "javac.exe": CreateProcess error=2, O sistema não pode encontrar o arquivo especificado
	at java.lang.ProcessBuilder.start(Unknown Source)
	at java.lang.Runtime.exec(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.tools.ant.taskdefs.Execute$Java13CommandLauncher.exec(Execute.java:834)
	at org.apache.tools.ant.taskdefs.Execute.launch(Execute.java:435)
	at org.apache.tools.ant.taskdefs.Execute.execute(Execute.java:449)
	at org.apache.tools.ant.taskdefs.compilers.DefaultCompilerAdapter.executeExternalCompile(DefaultCompilerAdapter.java:470)
	... 86 more
Caused by: java.io.IOException: CreateProcess error=2, O sistema não pode encontrar o arquivo especificado
	at java.lang.ProcessImpl.create(Native Method)
	at java.lang.ProcessImpl.(Unknown Source)
	at java.lang.ProcessImpl.start(Unknown Source)
	... 96 more

Não sei o que pode ser isso, alguem poderias me dar uma dica??

Eu chutaria que é só refazer o deploy no GAE… o erro é no servidor lá, não na aplicação, parece

O GAE usa windows em pt-br? :shock:

Não sei… mas ou é isso, ou o cara tá tentando fazer chamadas nativas via System.exec, ou algo do tipo

Não na verdade eu não estou tentando fazer nada de mais, baixei novamente do site do VRaptor vraptor-blank-project-gae-3.0.0, e estou tentando rodar essa versão, segui as instruções do arquivo README:

[quote]VRAPTOR BLANK PROJECT FOR GOOGLE APP ENGINE

IMPORTING THIS PROJECT ON ECLIPSE

In order to import this project on Eclipse, you’ll need to rename:
* classpath-example to .classpath
* project-example to .project
* settings-example to .settings[/quote]

Mais eu achei uma diferença no arquivo no .settings tem um arquivo “org.eclipse.jdt.core.prefs” e na settings-example tem um arquivo com o nome “com.google.appengine.eclipse.core.prefs”.

Isso faz alguma diferença?

O que eu estou tentado fazer é rodar o que já está no exemplo ainda não implementei nada.

você precisa do plugin do google app engine instalado no eclipse

Sim, mais o plugin já esta instalado, o que eu faço é clicar com o botão direito do mouse no projeto/run as/ Web Aplication.

Pela chamada javac.exe acho que no seu eclipse não está configurado o JDK, mas sim o JRE.

Vá no menu Window - Preferences - Java - Installed JREs e aponte para o JDK, e não para o JRE.

Value garcia-jj, value mesmo, era isso que você falou, estava faltando o JDK, eu só tinha instalado na minha maquina o JRE, instalei o JDK e fiz a alteração nas preferences que você falou, e tudo funcionou.

Obrigado.

O mais engraçado é que o Eclipse precisa da JDK, mas no menu diz JRE, hehehe.

Abraços