Estou tendo dificuldades de “acertar a mão” com os parâmetros em JSF. Gostaria de poder contar com a ajuda dos amigos:
Numa página JSF estou setando os seguintes parâmetros conforme abaixo:
<h:commandLink action="consMovVend">
<f:param name="mes" value="#{movVendBean.mes}"/>
<f:param name="ano" value="#{movVendBean.ano}"/>
<f:param name="usuario" value="#{usuario.usuCod}"/>
<h:graphicImage value="/mti.gif" style="border: 0px"/>
</h:commandLink>
Meu Bean está assim:
<managed-bean>
<managed-bean-name>usuario</managed-bean-name>
<managed-bean-class>com.mti.bean.Usuario</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>movVendBean</managed-bean-name>
<managed-bean-class>com.mti.bean.MovVend</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
Usuario e MovVend contém apenas seus respectivos getters e setters
Quando clico na imagem contida no h:CommandLink sou direcionado para uma página contendo uma h:dataTable:
<h:dataTable styleClass="tabela" headerClass="cabecalho" columnClasses="ultimo,primeiro" value="#{movVend.listaMovVend}" var="mov">
<h:column><f:facet name="header"><h:outputText value="Produto:" /></f:facet>
<h:outputText value="#{mov.prodCod}"/></h:column>
<h:column><f:facet name="header"><h:outputText value="AA:" /></f:facet>
<h:outputText value="#{mov.movVendRealAA}"/></h:column>
<h:column><f:facet name="header"><h:outputText value="MA:" /></f:facet>
<h:outputText value="#{mov.movVendRealMA}"/></h:column>
<h:column><f:facet name="header"><h:outputText value="Meta:" /></f:facet>
<h:outputText value="#{mov.movVendMeta}"/></h:column>
<h:column><f:facet name="header"><h:outputText value="Real:" /></f:facet>
<h:outputText value="#{mov.movVendReal}"/></h:column>
<h:column><f:facet name="header"><h:outputText value="% Real:" /></f:facet>
<h:outputText value="#{mov.movVendPercReal}"/></h:column>
</h:dataTable></div></td>
Abaixo está a classe DAO da qual provêm os dados da dataTable:
public MovVend[] getListaMovVend () throws ClassNotFoundException{
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs = null;
ArrayList al = null;
MovVend dados = new MovVend();
String mesAno =FacesUtil.getRequestParameter("ano")+FacesUtil.getRequestParameter("mes");
String usuCod =FacesUtil.getRequestParameter("usuario");
String sqlConsMovVend = "SELECT MovVend.ProdCod, MovVendRealAA, MovVendRealMA, MovVendMeta, MovVendReal, MovVendPercReal FROM MovVend, Produto WHERE Produto.ProdCod=MovVend.ProdCod AND MovVendMesAno='"+mesAno+"' AND UsuCod='"+usuCod+"'ORDER BY MovVend.ProdCod";
try {
Class.forName(driver);
conn = DriverManager.getConnection(url,user,password);
ps = conn.prepareStatement(sqlConsMovVend);
rs = ps.executeQuery();
al = new ArrayList();
while (rs.next()){
dados = new MovVend();
dados.setProdCod(rs.getString(1));
dados.setMovVendRealAA(rs.getString(2));
dados.setMovVendRealMA(rs.getFloat(3));
dados.setMovVendMeta(rs.getFloat(4));
dados.setMovVendReal(rs.getFloat(5));
dados.setMovVendPercReal(rs.getFloat(6));
al.add(dados);
}
conn.close();
rs.close();
ps.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
MovVend movVendAux[] = (MovVend[])al.toArray(new MovVend[al.size()]);
return(movVendAux);
}
e a classe FacesUtil abaixo:
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
public class FacesUtil {
// Getters -----------------------------------------------------------------------------------
public static String getRequestParameter(String name) {
return (String) FacesContext.getCurrentInstance().getExternalContext()
.getRequestParameterMap().get(name);
}
public static String getActionAttribute(ActionEvent event, String name) {
return (String) event.getComponent().getAttributes().get(name);
}
}
Agora é que é o problema. Minha dúvida está no seguinte: Quando clico pela primeira vez no link do h:commandLink, sou redirecionado para a página que contém a dataTable, porém os dados não são exibidos. Clicando no botão voltar do Browser, apertando o F5 (atualizar) e novamente ao clicar no commandLink aí a dataTable é exibida perfeitamente.
Poderiam me ajudar dizendo o que estou errando? Vale lembrar que sou iniciante, fiz tudo isso aí funcionar não sei bem como (rsrsrs)
Desde já agradeço!
Abraços
Marco Aurélio