Struts 2.0 : Resultado de uma Action : GET

11 respostas
rollei

As variaveis de uma action (quando sao setados metodos get) sao todas recuperaveis na pagina de resultado, via o objeto request. Eu queria saber se existe algum meio de retornar esses variaveis nao pelo request, mas usando o metodo GET, passando as variaveis e os valores dela na url

bem minha duvida eh essa: como retorno as variaveis da classe action na url da pagina de retorno?

[]'s

11 Respostas

fabio.nascimento

Só uma pergunta, pq vc precisa disso por GET ? se o correto seria por POST mesmo !

rollei

eu sei que o correto seria por post, mas eu to fazendo um modulo de um sistema ASP … eu nao sei quase nada de asp … mas pelo que eu vi o ASP nao tem um metodo para pegar essas variaveis passadas pelo post

o request do ASP tem dois metodos para recuperar variaveis o Request.QueryString(key) e o Request.Form(key), esse request form nao recupera as variaveis do request pelo post :confused: … e o query string soh recupera valores passados pelo metodo GET

seguinte, esse sistema ASP ta passando alguns valores para o modulo java, o modulo realiza algumas operacoes e retorna algumas variaveis pelo request. Eu nao tive problema NENHUM recuperando o request que o asp passou para o java, na Action eu simplesmente dei um request.getParameter(key) e ele me retornou o valor … nao estou conseguindo fazer o mesmo no ASP, por isso preciso passar pelo get para recuperar os valores pelo Request.QueryString, depois que eu conseguir colocar o programa funcionando eu vejo se existe algum meio no asp de recuperar esse request do java pelo POST, mas por enquanto eu soh queria deixar o programa funcionando

[]'s

fabio.nascimento

Cara, acho q na verdade eu ainda na entendi muito bem seu problema.

Entendo q vc tem um form e manda via post pra action ela processa e te devolve, até ai tudo bem.

O q vc tá querendo é, um form em ASP manda via post ou get pra uma action e essa essa action te devolva via get, é isso???

Se for até onde eu sei na devolução da action nao existe essa diferenciacao de post/get nao é bem transparente isso, mas enfim… vou ver se acho algo relacionado e volto aqui.

Abraços.

rollei

eh isso mesmo. eu tenho um formulario que esta numa pagina ASP, usando metodo POST. a action desse formulario esta apontando para uma action feita em java, dentro dessa action estou recuperando o valor dos campos do formulario. um processamento eh feito e algumas variaveis da classe action recebem o valor desse processamento, ate onde eu sei as variaveis definidas dentro do escopo da classe sao retornadas via request metodo POST (ou estou enganado?). a pagina de retorno dessa action java eh outra pagina asp que deve recuperar esses valores e exibir para o usuario

caso minha pagina de retorno nao fosse uma pagina asp e sim uma outra jsp dentro do contexto da minha aplicacao java eu recuperaria os valores dessas variaveis dentro do jsp usando

<s:property value=“algumaCoisa” />

ou

<%=request.getAttribute(algumaCoisa)%>

primeiro metodo eh preferivel

nao estou conseguindo recuperar esses valores na pagina ASP (pelo menos eu nao sei como). se eu conseguir passar essas variaveis por GET eu vou conseguir recuperar elas para mostrar ao usuario recuperando pelo Request.QueryString do asp

fabio.nascimento

Bom cara,

Cheguei acho que a uma conclusão.

Você terá que dar uma olhada nos seguintes itens:

Forward
ou
Redirect

Mas abaixo segue um trecho de codigo (usando forward), as é facil tbm encontrar algo com redirect.

Este código servirá se vc estiver usando servlet, caso esteja usando struts ou outro framework terá q adaptar, mas é facil tbm:

import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;
public class servletToJsp extends HttpServlet {

  public void doGet(HttpServletRequest request, HttpServletResponse response){
    request.setAttribute("servletName", "servletToJsp");

    try {
      getServletConfig().getServletContext().getRequestDispatcher(
        "/JSP/Demo.hello.jsp").forward(request,response);

    } catch (ServletException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }

}

Esse trecho de codigo acima, permite que você troque aonde está a pagina em jsp pela sua pagina em ASP, nesse caso você terá que concatenar os parametros que você quer devolver, acho que será tranquilo pra vc, mas se tiver algum problema, é só dizer.

Lembrando que se vc tiver usando algum frameqork de controle terá que implentar as alterações respeitando as normas do framework hein.

Abraços.

rollei

soh uma pergunta fabio, como faco usando esse getRequestDispatcher para redirecionar para um link externo ao contexto da aplicacao.

estou usando STRUTS 2.0 e minha classe esta extendendo ActionSupport e implementando as classes ServletRequestAware, ServletResponseAware, desse modo eu posso usar o getRequestDispatcher dentro da classe assim:

try {
                        request.getRequestDispatcher("http://www.google.com?variavel=" + variavel).forward(request, response);
                    } catch (ServletException ex) {
                        Logger.getLogger(FileUploadAction.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IOException ex) {
                        Logger.getLogger(FileUploadAction.class.getName()).log(Level.SEVERE, null, ex);
                    }

soh que quando eu faco isso ele redireciona para: “contextodaaplicacao/http:/www.google.com”

[]'s

edit
no javadoc da funcao ele diz isso:

fabio.nascimento

Estive lendo a documentação da sun

Dispatcher:
http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/ServletRequest.html#getRequestDispatcher(java.lang.String)

Redirect:
http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/http/HttpServletResponse.html#sendRedirect(java.lang.String)

E me parece que você terá que usar o redirect, pois a proposta do redirect é trabalhar com contextos diferentes mesmo.

Pois se quiser usar o Dispatcher terá que informar qual é o contexto do outro servidor, mas parece que você não tem essa informação certo?

Agora se você tiver poderia mencionar assim:

getServletContext().getContext( "/outroServidor" )
.getRequestDispatcher( "/caminho/dessaOutraAplicacao" )
.forward( request, response );

Caso contrário opte mesmo pelo redirect:

response.sendRedirect("http://www.google.com?variavel=" + variavel");
rollei

vlw fabio, consegui linkar a pagina externa

fabio.nascimento

Cara, faz o seguinte agora:

Coloque aqui o trecho do codigo que resolve esse problema a fim de que outros tbm possam se beneficiar.

Abraços.

Fabio Nascimento

rollei
public class FileUploadAction extends ActionSupport implements ServletRequestAware, ServletResponseAware{
    
    private HttpServletRequest  request;
    private HttpServletResponse response;
    
    private static final String serverDirName = "Publica";
    private static final String serverIp      = "172.25.5.59";
    
    private String serverFileName;
    private String number;
    private String errorMsg;
    
    private Long   uploadFileLength;
    private String uploadFilePath;
    private String uploadFileName;
    private String uploadContentType;
    
    private File upload;
    
    public void upload() throws IOException {
        
        number = request.getParameter("txtnumero");
        
        String serverFileNameSufix = "_a0";
        String sep         = File.separator;
        String tempPath     = new StringBuilder()
                                .append(
                                    request.getRealPath(
                                        new StringBuilder()
                                            .append("content")
                                            .append(sep)
                                            .append("temp")
                                            .append(sep)
                                            .toString()
                                    )
                                )
                                .append(sep)
                                .toString();
        String fullPath    = new StringBuilder()
                                .append(sep)
                                //.append(sep)
                                //.append(serverIp)
                                .append("mnt")
                                .append(sep)
                                //.append(serverDirName)
                                .append("edoweb")
                                .append(sep)
                                .toString();
        System.out.println(fullPath);
        String imagesPath = new StringBuilder()
                                .append(
                                    request.getRealPath(
                                        new StringBuilder()
                                            .append("content")
                                            .append(sep)
                                            .append("images")
                                            .append(sep)
                                            .toString()
                                    )
                                )
                                .append(sep)
                                .toString();
        
        String watermark   = "watermark.png";
        uploadFilePath     = request.getParameter("hiddenPath");
        
        if (upload.length() > 0L) {
            try {
                if ( uploadFileName.substring(uploadFileName.lastIndexOf(".")).equalsIgnoreCase(".odt")) {
                    //System.out.println("Arquivo tem extensao");
                    serverFileName = new StringBuilder()
                                        .append(number)
                                        .append(serverFileNameSufix)
                                        .append(uploadFileName.substring(uploadFileName.lastIndexOf(".")))
                                        .toString();
                } else {
                    //System.out.println("Arquivo nao tem extensao");
                    errorMsg = new StringBuilder()
                                .append("O arquivo ")
                                .append(uploadFileName)
                                .append(" não é do tipo 'odt'")
                                .toString();
                    response.sendRedirect(
                        new StringBuilder()
                            .append("http://edoweb.seplag.ce.gov.br/upload/upload_erro.asp?errorMsg=")
                            .append(errorMsg)
                            .toString());
                    //return ERROR;
                }

                //Cria o diretorio, caso ele nao exista
                File dir = new File(fullPath);
                System.out.println(dir.isDirectory());
                if (!dir.isDirectory()) {
                    errorMsg = new StringBuilder()
                                .append("O caminho ")
                                .append(fullPath)
                                .append(" não existe.")
                                .toString();
                    response.sendRedirect(
                        new StringBuilder()
                            .append("http://edoweb.seplag.ce.gov.br/upload/upload_erro.asp?errorMsg=")
                            .append(errorMsg)
                            .toString());
                    //return ERROR;
                    
                }

                //cria o arquivo, caso ele não exista
                File theFile = new File(fullPath + serverFileName);

                uploadFileLength = upload.length();

                if (!theFile.exists()) {
                    FileUtils.copyFile(upload, theFile);
                } else {
                    errorMsg = new StringBuilder()
                                .append("O arquivo ")
                                .append(serverFileName)
                                .append(" já existe no caminho")
                                .append(fullPath)
                                .toString();
                    response.sendRedirect(
                        new StringBuilder()
                            .append("http://edoweb.seplag.ce.gov.br/upload/upload_erro.asp?errorMsg=")
                            .append(errorMsg)
                            .toString());
                    //return ERROR;
                }

                OdtNumberGenerator gen = new OdtNumberGenerator();

                gen.trataOdt(
                        tempPath ,
                        fullPath + serverFileName ,
                        fullPath + serverFileName ,
                        imagesPath + watermark ,
                        number
                );

            } catch (Exception e) {
                addActionError(e.getMessage());
            }
            System.out.println("O arquivo foi criado com sucesso");
            response.sendRedirect(
                    new StringBuilder()
                        .append("http://edoweb.seplag.ce.gov.br/upload/upload_documentosv2.asp?uploadFileLength=")
                        .append(uploadFileLength)
                        .append("&uploadFilePath=")
                        .append(uploadFilePath)
                        .append("&uploadFileName=")
                        .append(uploadFileName)
                        .append("&uploadContentType=")
                        .append(uploadContentType)
                        .toString());
            //return SUCCESS;
        } else {
            errorMsg = new StringBuilder()
                                .append("O caminho ")
                                .append(uploadFilePath)
                                .append(" não aponta para um arquivo válido")
                                .toString();
            response.sendRedirect(
                new StringBuilder()
                    .append("http://edoweb.seplag.ce.gov.br/upload/upload_erro.asp?errorMsg=")
                    .append(errorMsg)
                    .toString());
            //return ERROR;
        }
    }

a classe faz o seguinte: ta pegando o upload de um form via asp, um arquivo do tipo .odt. existe uma funcao que vai alterar esse odt, inserir um numero no comeco do documento e inserir uma marca d’agua a classe tem que retornar para a pagina asp os detalhamentos do arquivo (tamanho, nome, caminho completo)

rollei

só uma pequena dica: depois que eu coloquei o response.sendRedirect o programa estava jogando uma excecao, porque depois dos send eu estava dando um return, parece que o sendRedirect funciona tentando parar a execucao da pagina e mandando para uma outra, mas se jah foi mandado um outro response, nesse caso aconteceu que o return terminou sua execucao antes da execucao do redirect, o programa vai jogar uma excecao

entao se voce for dar um redirect, nao coloque nenhum return depois dele

Criado 18 de maio de 2008
Ultima resposta 19 de mai. de 2008
Respostas 11
Participantes 2