[Resolvido] VRaptor 3 - Como o Controller retorna apenas texto puro

Olá pessoal, estou começando a usar o VRaptor, e quero usa-lo para retornar um conteúdo pra atualizar uma parte da parte usando ajax com jQuery.

Não quero retornar XML ou JSON, preciso retornar o HTML da parte da página que quero atualizar.

Como resolvo isso??

Tentei com Results.http() mas acho que não é com ele.

Garcia-jj, Valeu pela resposta. Meu primeiro teste foi justamente com este código. Deu erro.

Tentei novamente agora e o erro persiste. Necessita de alguma anotação?

Desculpem qualquer vacilo, estou estudando java na faculdade, tenho mais contato com .NET.

@Resource
public class IndexController {

	private final Result result;

	public IndexController(Result result) {
            this.result = result;
	}

	@Path("/")
	public void index() {
            //result.include("variable", "VRaptor!");
            this.result.use(Results.http()).body("Msg...");
	}

}

ERRO

OBS: Estou usando o NetBeans, que já vem com o GlassFish. Se tiver uma configuração mais fácil ou um tutorial pra indicar de como usar o Eclipse, só falar.

A mensagem completa do erro fica nos logs, que é impresso no console do netbeans e também no arquivo GLASSFISH/domains/domain1/logs/server.log. Se vocẽ quiser cole aqui o trecho do log que tenha a mensagem.

Abraços

O meu arquivo server.log está na pasta

\GlassFish_Server_3\glassfish\domains\javadomain\logs

[#|2010-09-11T23:28:19.703-0700|WARNING|glassfish3.0.1|
javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=30;_ThreadName=Thread-1;|StandardWrapperValve[default]: PWC1406: Servlet.service() for servlet default threw exception
br.com.caelum.vraptor.InterceptionException: an exception was raised while executing resource method
at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:86)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:77)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.blank.BlahInterceptor.intercept(BlahInterceptor.java:18)
at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept
(InterceptorListPriorToExecutionExtractor.java:46)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:277)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NoSuchMethodError: br.com.caelum.vraptor.view.HttpResult.body(Ljava/lang/String;)
Lbr/com/caelum/vraptor/view/HttpResult;
at br.com.caelum.vraptor.blank.IndexController.index(IndexController.java:36)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:57)
… 53 more

Qual versão você está usando do Vraptor? Para essa funcionalidade é necessário você ter pelo menos a 3.1.3 se não me engano.

Abraços

Estou usando a última versão mesmo.

vraptor-3.1.3.jar

estou usando o vraptor-blank-project-3.1.3

Vou instalar o ambiente no meu note e v se derrepente não é alguma louca da minha máquina de casa. Não custa tentar.

por enquanto q não funciona, vc pode ainda fazer assim

da um

result.include(“msg”,seuTexto);

e no jsp vc poem

${msg}

claro que não é a melhor solução =x

Essa abordagem só vai me servir se o VRaptor me permitir fazer o JSP simples e de forma que me retorne apenas o Texto.

Exemplo:

No exemplo de boas vindas do vRaptor lá no JSP eu não teria nada além do

e no meu Controller a setagem do valor do mesmo

vou testar.

Outra solução, que uso quando realmente quero controlar o fluxo de saida pode ser esta.

[code]public class SeuController {
private final HttpServletResponse response;
private final Result result;

public SeuController(HttpServletResponse response,Result result) {
    this.response = response;
    this.result = result;
}


public void sualogica() {
    result.use(Results.http()).nothing();
    PrinteWriter printer = response.getWriter();
    printer.println("seu texto aqui");
}

}[/code]

[quote=RogerGales]Essa abordagem só vai me servir se o VRaptor me permitir fazer o JSP simples e de forma que me retorne apenas o Texto.

Exemplo:

No exemplo de boas vindas do vRaptor lá no JSP eu não teria nada além do

e no meu Controller a setagem do valor do mesmo

vou testar.[/quote]

não há problema nenhum de não ter nenhum texto no seu JSP… mas o ideal é que vc deixe os cabeçalhos do JSP, para o caso de querer incluir taglibs, ou ter q ativar manualmente expression lenguagem.

por exemplo

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>${variable}

neste jsp ele só imprime o variable… e @Page, serve apenas para definir, content type, iso, etcs mas nada impede que seu jsp seja apenas o ${variable}, a não ser que vc tenha que deinfinir que expression lenguage esta ativa manualmente.

Vlw Lavieri. Vou testar essa abordagem tbm.

Será que não é simples fazer um Results.html(), e adicionar um método content(String content) para realizar esta tarefa?

o result.use(http()).body(“abc”) deveria funcionar…

vc tá com mais de um jar do VRaptor na pasta WEB-INF/lib? No eclipse ele compila direitinho?

tente dar um clean no projeto e um clean no servidor e rodar de novo.

esse método foi incluido na versão 3.1.3, então se por um acaso alguma versão anterior estiver no classpath junto com a nova dá esse conflito do NoMethodFound

Lucas, eu ia sugerir isso ou então tem um jar mais antigo do Vraptor no nivel do container.

Seguinte, instalei o GlassFish e fiz a configuração do Eclipse no meu notebook, abri o vraptor-blank-project-3.1.3 e foi disparada a seguinte exception

sendo que existe o aquivo

Resolvi o problema apenas sobreescrevendo o arquivo vraptor-3.1.3.jar existente na pasta, pelo arquivo jar existente no arquivo vraptor-3.1.3.zip que eu baixei.

Em casa eu tive o mesmo problema, sendo que lá eu importei o vraptor-3.1.3.jar do mesmo arquivo zip, e não, realizei a cópia do mesmo sobre a já existente na pasta lib.

Quando o Lucas citou

Imaginei que podia ser mesmo isso, já que recordava de ter feito essa importação.

PS: Já ia esquecendo de falar, fiz o teste com a abordagem padrão e funcionou perfeitamente.