Struts e MVC

Pessoal, estou com uma dúvida…

Creio que seja mais conceitual do que qualquer outra coisa.

Seguinte.
Tenho aqui um exemplo de videlocadora, com Struts, que estou vendo agora. Tenho as seguintes classes:

ConsultaForm

[code]package catalogo.form;

import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionError;
import org.apache.struts.util.MessageResources;

public final class ConsultaForm extends ActionForm
{

private String ideGenero = null;
private String desCatalogo = null;

public String getIdeGenero()
{
    return (this.ideGenero);
}

public void setIdeGenero(String ideGenero)
{
    this.ideGenero = ideGenero;
}

public String getDesCatalogo()
{
    return (this.desCatalogo);
}

public void setDesCatalogo(String desCatalogo)
{
    this.desCatalogo = desCatalogo;
}

public void reset(ActionMapping mapping, HttpServletRequest request)
{
    ideGenero = null;
    desCatalogo = null;
}


public ActionErrors validate(ActionMapping mapping,
        HttpServletRequest request)
{
    ActionErrors erros = new ActionErrors();

    Locale locale = request.getLocale();
    MessageResources messages = (MessageResources) servlet.getServletContext().getAttribute(Action.MESSAGES_KEY);

    if ("Consulta".equals(mapping.getParameter()))
    {
        if ((ideGenero == null) || (ideGenero.length() < 1))
        {
            erros.add(ActionErrors.GLOBAL_ERROR, new ActionError("validacao.obrigatoriedade", messages.getMessage("interface.ideGenero")));
        }
    }
    return erros;
}

}[/code]

ConsultaAction

[code]package catalogo.action;

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.ActionErrors;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.DriverManager;
import java.sql.SQLException;
import catalogo.bean.CatalogoBean;
import catalogo.bean.GeneroBean;
import java.util.ArrayList;
import catalogo.form.ConsultaForm;

public final class ConsultaAction extends Action
{
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
{
HttpSession session = request.getSession();
ActionErrors erros = new ActionErrors();
Connection con = null;
Statement st = null;
ResultSet rs = null;
ConsultaForm consultaForm = (ConsultaForm) form;

    if ("/consultaResultadoEfetuarConsulta".equals(mapping.getPath()))
    {
        try
        {
            
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            con = DriverManager.getConnection("jdbc:odbc:Catalogo");
            st = con.createStatement();
            String sql = "SELECT * FROM Catalogo";
            sql += " WHERE ideGenero = " + consultaForm.getIdeGenero();
            if (!consultaForm.equals(""))
            {
                sql += " AND desCatalogo LIKE '%" + consultaForm.getDesCatalogo() + "%'";
            }
            rs = st.executeQuery(sql);
           
            ArrayList catalogo = new ArrayList();
            
            while(rs.next())
            {
                CatalogoBean bean = new CatalogoBean();
                bean.setIdeCatalogo(rs.getString("ideCatalogo"));
                bean.setDesCatalogo(rs.getString("desCatalogo"));
                catalogo.add(bean);
            }
            
            request.setAttribute("catalogo", catalogo);
        }
        catch (ClassNotFoundException cnfe)
        {
            erros.add(ActionErrors.GLOBAL_ERROR, new ActionError("validacao.erro", cnfe.getMessage()));
        }
        catch (SQLException sqle)
        {
            erros.add(ActionErrors.GLOBAL_ERROR, new ActionError("validacao.erro", sqle.getMessage()));
        }
    }
 
    
    if ("/consultaPrepararVisualizacao".equals(mapping.getPath()))
    {
        try
        {

            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            con = DriverManager.getConnection("jdbc:odbc:Catalogo");
            st = con.createStatement();
            rs = st.executeQuery("SELECT * FROM Genero");
           
            ArrayList genero = new ArrayList();
           
            while(rs.next())
            {
                GeneroBean bean = new GeneroBean();
                bean.setIdeGenero(rs.getString("ideGenero"));
                bean.setDesGenero(rs.getString("desGenero"));
                genero.add(bean);
            }
            
            session.setAttribute("genero", genero);
        }
        catch (ClassNotFoundException cnfe)
        {
            erros.add(ActionErrors.GLOBAL_ERROR, new ActionError("validacao.erro", cnfe.getMessage()));
        }
        catch (SQLException sqle)
        {
            erros.add(ActionErrors.GLOBAL_ERROR, new ActionError("validacao.erro", sqle.getMessage()));
        }
    }

    if (!erros.isEmpty())
    {
        saveErrors(request, erros);
        return (mapping.getInputForward());
    }
   
   if (mapping.getAttribute() != null)
   {
       if ("request".equals(mapping.getScope()))
       {
           request.removeAttribute(mapping.getAttribute());
       }
       else
       {
           session.removeAttribute(mapping.getAttribute());
       }
    }

    return (mapping.findForward("sucesso"));
}

}[/code]

E também o JSP Consulta.jsp:

[code]<%@ page language="java" %>

<%@ taglib prefix="bean" uri="/WEB-INF/struts-bean.tld" %>
<%@ taglib prefix="html" uri="/WEB-INF/struts-html.tld" %>
<%@ taglib prefix="logic" uri="/WEB-INF/struts-logic.tld" %>

<html:errors/>

<html:form action="/consultaResultadoEfetuarConsulta" focus="ideGenero">
<table cellspacing=5 cellpadding=0 width="90%">
<tr>
<td align="right">

            &lt;bean&#58;message key=&quot;interface.ideGenero&quot; /&gt; 
        &lt;/td&gt;
        &lt;td align=&quot;left&quot;&gt;
                  
            &lt;html&#58;select property=&quot;ideGenero&quot; &gt;
            
                &lt;logic&#58;present name=&quot;genero&quot;&gt;
                
                    &lt;html&#58;options collection=&quot;genero&quot; property=&quot;ideGenero&quot; labelProperty=&quot;desGenero&quot; /&gt;
                &lt;/logic&#58;present&gt;
            &lt;/html&#58;select&gt;
        &lt;/td&gt;
    &lt;/tr&gt;       
    &lt;tr&gt;
        &lt;td align=&quot;right&quot;&gt;
       
            &lt;bean&#58;message key=&quot;interface.desCatalogo&quot; /&gt;
        &lt;/td&gt;
        &lt;td align=&quot;left&quot;&gt;

            &lt;html&#58;text property=&quot;desCatalogo&quot; /&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td colspan=&quot;2&quot; &gt;
        &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
   
        &lt;td align=&quot;right&quot;&gt;
            &lt;html&#58;submit&gt;Ok&lt;/html&#58;submit&gt;
        &lt;/td&gt;
        &lt;td align=&quot;left&quot;&gt;
            &lt;html&#58;reset&gt;Limpar&lt;/html&#58;reset&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;

</html:form>
<br>[/code]

A dúvida é a seguinte…
O Bean efetuará os getters e setters somente dos campos que forem “solicitados” pelo formulário, independente de quantos existem no banco?

PS: No caso desse banco há desCatalogo, ideGenero, ideMidia e ideCatalogo na table referida.

Agradeço desde já!

Quando você submeter o seu jsp, serão chamados os métodos get e set apenas para as propriedades que estão no formulário, no caso: desCatalogo e ideGenero.
O banco é independente da aplicação, mas para cada propriedade do formulário deve haver um atributo correspondente no seu form.

Espero ter ajudado! :wink: