Colocar valor recebido pelo request em <html:text> no Struts

13 respostas
W

Olá pessoal,

Tenho outra dúvida. Queria saber como faço pra colocar um valor recebido pelo “request” em um tag html:text no Struts, pois após o action realizar a pesquisa e direcionar para outra página eu quero colocar os valores encontrados do objeto no tag

Na página que está recebendo eu posso imprimir os resultados assim:

<bean:write name="contato" property="idContato"/>

Mas como colocar os valores em:

<html:text  />

Código do Action

package com.myapp.struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;


public class EditaContatoAction extends Action {

    private final static String SUCCESS = "editarContato";

    public ActionForward execute(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        HttpSession session = request.getSession();
        String idContato = request.getParameter("idContato");  
        Contato contato = new Contato();
        ContatoDAO contatoDAO = new ContatoDAO();
        int temp = Integer.parseInt(idContato);
        contato = contatoDAO.findContatoByIdContato(temp);
        request.setAttribute("contato", contato);
        contatoDAO.close();
        return mapping.findForward(SUCCESS);   
    }
}

Grato.
Wallfox

13 Respostas

N

Faça assim:

&lt;html:text property="nome" maxlength="40" size="40" name="contato"/&gt;

Espero ter ajudado.

W

Olá, Neo

Você pode me ajudar me ensinando como posso fazer isso?

Grato.
Wallfox

N

Wallfox:
Olá, Neo

Você pode me ajudar me ensinando como posso fazer isso?

Grato.
Wallfox

Pode perguntar

rmarin

Você pode fazer como o Neo disse, você coloca o seu objeto no request. Quando estiver na action, você faz:

request.setAttribute("objeto");

Depois no seu jsp você pode utilizar a tag que o Neo postou aqui!

W

Maravilha!!!

Agora estou com o seguinte problema. Eu receber os valores e colocar nas Tags eu preciso fazer o Submit dos valores dos Tags, mas acontece o seguinte erro após clicar no submit:

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Cannot find bean contato in any scope
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
	org.apache.jsp.editaContato_jsp._jspService(editaContato_jsp.java:89)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
	org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
	org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263)
	org.apache.struts.action.RequestProcessor.internalModuleRelativeForward(RequestProcessor.java:1001)
	org.apache.struts.tiles.TilesRequestProcessor.internalModuleRelativeForward(TilesRequestProcessor.java:345)
	org.apache.struts.action.RequestProcessor.processValidate(RequestProcessor.java:966)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:204)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)

root cause

javax.servlet.jsp.JspException: Cannot find bean contato in any scope
	org.apache.struts.taglib.TagUtils.lookup(TagUtils.java:934)
	org.apache.struts.taglib.html.BaseFieldTag.prepareValue(BaseFieldTag.java:121)
	org.apache.struts.taglib.html.BaseFieldTag.renderInputElement(BaseFieldTag.java:102)
	org.apache.struts.taglib.html.BaseFieldTag.doStartTag(BaseFieldTag.java:81)
	org.apache.jsp.editaContato_jsp._jspx_meth_html_text_0(editaContato_jsp.java:230)
	org.apache.jsp.editaContato_jsp._jspx_meth_html_form_0(editaContato_jsp.java:120)
	org.apache.jsp.editaContato_jsp._jspService(editaContato_jsp.java:78)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
	org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
	org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263)
	org.apache.struts.action.RequestProcessor.internalModuleRelativeForward(RequestProcessor.java:1001)
	org.apache.struts.tiles.TilesRequestProcessor.internalModuleRelativeForward(TilesRequestProcessor.java:345)
	org.apache.struts.action.RequestProcessor.processValidate(RequestProcessor.java:966)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:204)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)

Segue minha página JSP se ajudar

<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %>
<%//@ page errorPage="erro.jsp" %>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Editar Contato</title>
    </head>
    <body>

        <h1>Editar Contato</h1>
        <html:form action="efetuaEdicaoContato">
            <table border="1">
                <thead>
                    <tr>
                        <th>Campo</th>
                        <th>Valor</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td></td>
                        <td><html:text name="contato" property="idContato"/></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td><html:text name="contato" property="nomeContato"/></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td><html:text name="contato" property="sobrenomeContato"/></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td><html:text name="contato" property="empresaContato"/></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td><html:text name="contato" property="enderecoContato"/></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td><html:text name="contato" property="cidadeContato"/></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td><html:text name="contato" property="estadoContato"/></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td><html:text name="contato" property="emailContato"/></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td><html:text name="contato" property="dddContato"/></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td><html:text name="contato" property="telefoneContato"/></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td><html:text name="contato" property="celularContato"/></td>
                    </tr>
                </tbody>
            </table>
            <html:submit value="Envia dados"/>
            <html:reset value="Limpa"/>
            <html:errors/>
        </html:form>

    </body>
</html>

Grato
WallFox

rmarin

Isso ocorre porque o não foi possível localizar seu atributo no request.
Você colocou no request direitinho nas sua action?

Nas sua action deve ter algo do tipo:

request.setAttribute("contato", contato);

Caso contrário seu jsp não irá encontrar o atributo “contato” no request.

W

Então, segue abaixo a Action que estou usando para trazer os dados para a página onde depois eu faço o submit. Ele está aparecendo os valores no text tudo OK, mas eu quero fazer um submit da página JSP com as tags <html:text name="contato" property="nomeContato"/>
e é isso que não está funcionando

Action que faz os dados aparecerem no Text funcionando correto

package com.myapp.struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;

public class EditaContatoAction extends Action {

    private final static String SUCCESS = "editarContato";

    public ActionForward execute(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        HttpSession session = request.getSession();
        String idContato = request.getParameter("idContato");
        Contato contato = new Contato();
        ContatoDAO contatoDAO = new ContatoDAO();
        int temp = Integer.parseInt(idContato);
        contato = contatoDAO.findContatoByIdContato(temp);
        request.setAttribute("contato", contato);
        contatoDAO.close();
        return mapping.findForward(SUCCESS);   
    }
}
marciobarroso

O que pode resolver seu problema também é usar o form, que já é trafagado em cada request, ao invés de colocar outro objeto nela.

Na Action

DynaActionForm dyna = (DynaActionForm)form;    
    String idContato = dyna.get("idContato").toString();
    
    Contato contato = new Contato();
    ContatoDAO contatoDAO = new ContatoDAO();
    int temp = Integer.parseInt(idContato);
    contato = contatoDAO.findContatoByIdContato(temp);
    
    dyna.set("nomeContato", contato.getNomeContato());
    ...
    dyna.set("celularContato", contato.getCelularContato());

return mapping.findForward(SUCCESS);

no Jps permanece como está.

Se o struts já possibilita o uso do form como objeto de request, na minha opinião, não devemos fazer firulas … vamos tirar o máximo de proveito do que o framework nos oferece.

Abraço

W

Olá,

Existe alguma diferença ou vantagem entre as formas abaixo:

DynaActionForm dyna = (DynaActionForm) form;
ContatoStrutsActionForm contatoForm = (ContatoStrutsActionForm) form;

Grato.
Wallfox

marciobarroso

Wallfox:
Olá,

Existe alguma diferença ou vantagem entre as formas abaixo:

DynaActionForm dyna = (DynaActionForm) form;
ContatoStrutsActionForm contatoForm = (ContatoStrutsActionForm) form;

Grato.
Wallfox

O DynaActionForm é um herdeiro de ActionForm …

Pode-se dizer que ele possui tudo que o ActionForm possuí, e mais algumas “cossitas” que ajudam mto no desenvolvimento.

Vide API :
http://struts.apache.org/1.x/struts-core/apidocs/org/apache/struts/action/DynaActionForm.html
http://struts.apache.org/1.x/struts-core/apidocs/org/apache/struts/action/ActionForm.html

abraço

N

O DynaActionForm é dinâmico e vc não precisa escrever uma classe Java para ele. É só declarar seus atributos via XML.

marciobarroso

Não é bem assim Neo.

Vc pode escrever um ActionForm no xml também. A grande vantagem do Dyna é que ele possui mais métodos de acesso a atributos, e como o próprio nome diz, tudo de forma mais dinâmica.

Abraço

N

Não é bem assim Neo.

Vc pode escrever um ActionForm no xml também. A grande vantagem do Dyna é que ele possui mais métodos de acesso a atributos, e como o próprio nome diz, tudo de forma mais dinâmica.

Abraço

marciobarroso, foi mal. É que sempre usei o DynaForm assim, então pensei que uma das diferenças dele era essa.

Criado 1 de agosto de 2006
Ultima resposta 3 de ago. de 2006
Respostas 13
Participantes 4