VRaptor - Formulário .jsp - Edit

14 respostas
D
<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:

14 Respostas

Lucas_Cavalcanti

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)

D

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:

G

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/

Lucas_Cavalcanti

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

D

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??

Lucas_Cavalcanti

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

G

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

Lucas_Cavalcanti

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

D

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:

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

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.

Lucas_Cavalcanti

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

D

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.

G

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.

D

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.

G

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

Abraços

Criado 15 de outubro de 2009
Ultima resposta 16 de out. de 2009
Respostas 14
Participantes 3