useBean, como setar os valores

7 respostas
R

Olá!
Tenho a seguinte página JSP, não sei se é uma boa prática mas vou disponibilizar todo o conteúdo dela aqui, vejam:

<%@ page language="java" %>
<%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>

<jsp:useBean id="artista" class="br.com.webmusicsite.bean.Artista" scope="request" />
<jsp:setProperty name="artista" property="*" />

<table width="650" border="0" cellpadding="4" cellspacing="0" align="center">
<form name="frm" action="servlet/CadastroArtistaServlet" method="post">
<input type="hidden" name="art_id" value="">
<tr>
	<td width="20%">Nome: </td>
	<td><input type="text" name="art_nome" value="<jsp:getProperty name="artista" property="art_nome"/>" size="100" maxlength=""></td>
</tr>
<tr>
	<td>Nome Completo: </td>
	<td><input type="text" name="art_full_nome" value="<jsp:getProperty name="artista" property="art_full_nome"/>" size="" maxlength=""></td>
</tr>
<tr>
	<td class="SubTitle" colspan="2">Dados do Nascimento</td>
</tr>
<tr>
	<td>Data: </td>
	<td><input type="text" name="art_nasc_dat" value="<jsp:getProperty name="artista" property="art_nasc_dat"/>" size="" maxlength=""></td>
</tr>
<tr>
	<td>Cidade: </td>
	<td><input type="text" name="art_nasc_cid" value="<jsp:getProperty name="artista" property="art_nasc_cid"/>" size="" maxlength=""></td>
</tr>
<tr>
	<td>Estado: </td>
	<td><input type="text" name="art_nasc_est" value="<jsp:getProperty name="artista" property="art_nasc_est"/>" size="" maxlength=""></td>
</tr>
<tr>
	<td>País: </td>
	<td><input type="text" name="art_nasc_pais" value="<jsp:getProperty name="artista" property="art_nasc_pais"/>" size="" maxlength=""></td>
</tr>
<tr>
	<td class="SubTitle" colspan="2">Dados do Falecimento</td>
</tr>
<tr>
	<td>Data: </td>
	<td><input type="text" name="art_mort_dat" value="<jsp:getProperty name="artista" property="art_mort_dat"/>" size="" maxlength=""></td>
<tr>
	<td>Cidade: </td>
	<td><input type="text" name="art_mort_cid" value="<jsp:getProperty name="artista" property="art_mort_cid"/>" size="" maxlength=""></td>
</tr>
<tr>
	<td>Estado: </td>
	<td><input type="text" name="art_mort_est" value="<jsp:getProperty name="artista" property="art_mort_est"/>" size="" maxlength=""></td>
</tr>
<tr>
	<td>País: </td>
	<td><input type="text" name="art_mort_pais" value="<jsp:getProperty name="artista" property="art_mort_pais"/>" size="" maxlength=""></td>
</tr>
<tr>
	<td class="SubTitle" colspan="2">Dados do Falecimento</td>
</tr>

<tr>
	<td>Anos de Atividade</td>
	<td>
		<select name="art_ativ_ini">
		<option value="0">Inicio</option>
		<c:forEach var="anos" begin="1900" end="2005" step="10"> 
			<option value="${anos}">${anos}</option>
		</c:forEach>
		</select>  a  
		<select name="art_ativ_fim">
		<option value="0">Término</option>
		<c:forEach var="anos" begin="1900" end="2005" step="10"> 
			<option value="${anos}">${anos}</option>
		</c:forEach>
		</select>
</td>
</tr>
<tr>
	<td valign="top">Biografia: </td>
	<td><textarea name="art_biografia" cols="80" rows="10"><jsp:getProperty name="artista" property="art_biografia"/></textarea></td>
</tr>
<tr>
	<td colspan="2" valign="middle" align="center"><input type="submit" value="  Salvar  " class="botao"></td>
</tr>
<tr>
	<td></td>
	<td></td>
</tr>
</form>
</table>

Percebam que o action do form chama um servlet, nesse servlet eu quero
receber o Bean preenchido, já que os campos do formulário estão com o mesmo nome dos atributos do Bean.

vejam:

// Servlet Code
Artista artista = (Artista) request.getAttribute("artista");

Mas o objecto não está sendo recebido no servlet!
Alguma idéia de como fazer isso :?:

valeu!

7 Respostas

R

Nãoo! Desculpe acho que me expressei mal.

é o seguinte, quero que o bean seja preenchido quando eu submiter os dados, para que eu não precise fazer o processo de:

...
 artista.setNome( request.getParameter("Campos_do_Formulario") );
...

capiche?

J

A melhor forma que eu sei, seriam os ActionForm do Struts, se servir dê uma olhada…

Apache Struts

M

O melhor é fazer com a própria action <jsp:useBean/>. Mas ai tu teria que enviar a requisição pra um Jsp, pode ser até o mesmo. Por ex, digamos que tu tenha setado a action do teu form para o mesmo jsp, tu teria isto no início dele:

&lt;c&#58;if test="$&#123;foo != null&#125;"&gt;
   &lt;jsp&#58;useBean id="foo" class="com.Foo"&gt;
      &lt;jsp&#58;setProperty name="foo" property="*" /&gt;
   &lt;/jsp&#58;useBean&gt;

   &lt;jsp&#58;forward page="teuServlet" /&gt;
&lt;/c&#58;if&gt;

Ok, confesso que é meio gambiarra :roll:, huehuaeuh, mas é que eu tb adoro esse lance do useBean de percorrer o form e setar os atributos do objeto automamente. :slight_smile:

R

Matheus, eu trabalho exatamente da maneira que você colocou, e tb acho uma baita gambiarra.

O amigo Jair respondeu uma forma interessante, porém, eu não gosto do Struts (não quero abrir discursão sobre o assunto) acho que ele dá muitas voltas, enfim, muito trabalhoso.

De qualquer maneira quero ainda uma maneira de resolver isso, vou pesquisar para entender como o Struts faz isso. Eu sempre usava scriptles nos JSP, a partir de agora estou trabalhando com o JSTL pensei que essa seria a solução para esse problema, mas não é.

obrigado pela atenção, mesmo assim o tópico continua em aberto.

M

Bem, se Struts esta fora de discução, o uso de qualquer framework web tb está? Se não, de uma olhada no Webwork, ele implementa isso de forma bem simples e direta.

W

Tem uma forma de vc fazer isso.
Eu a uso aki, mas vc vai ter q adicionar mais uma lib no seu projeto, se vc nao se importar com isso. É a commons-beanutils do projeto jakarta, a utilizacao é simples e até agora nao vi nenhum overhead que pudesse impedir seu uso.
O método que eu criei para utiliza-la foi o seguinte:

public static Object povoaBean&#40;Object obj, HttpServletRequest request&#41;&#123;
        Map valores = new HashMap&#40;&#41;;
        Enumeration names = request.getParameterNames&#40;&#41;;
        while &#40;names.hasMoreElements&#40;&#41;&#41; &#123;
            String name = &#40;String&#41; names.nextElement&#40;&#41;;
            valores.put&#40;name, request.getParameterValues&#40;name&#41;&#41;;
        &#125;
        try &#123;
            BeanUtils.populate&#40;obj, valores&#41;;
        &#125; catch &#40;IllegalAccessException e&#41; &#123;
            System.out.println&#40;e,"Metodos.povoaBean - IllegalAccessException"&#41;;
            return null;
        &#125; catch &#40;InvocationTargetException e&#41; &#123;
            System.out.println&#40;e,"Metodos.povoaBean - InvocationTargetException"&#41;;
            return null;
        &#125;
        return obj;
    &#125;

Acho q isso deve resolver seu problema, é só colocar isso na sua servlet e pronto.

R

Obrigado pela ajuda de todos!

Criado 4 de agosto de 2005
Ultima resposta 14 de ago. de 2005
Respostas 7
Participantes 4