[JSF] Ao clicar no botao, alimentar uma datatable com dados do BD

7 respostas
C

Pessoal, ao clicar em um botão, preciso que ele vá no banco de dados e alimente uma DataTable com os dados que ele trouxe.

Pretendo usar um ManagedBean. Aqui está parte do meu código:

management_reports.jsf

<f:view>
                            <h:form>
                                <table id="tableSearch">
                                    <tr>
                                        <td>
                                            <input type="radio" id="rbtDayRel" name="search" checked>Por Dia: </input> 
                                            <h:inputText id="txtDayRel" onkeypress="mask(this,dateRange)" maxlength="10" />
                                        </td>
                                        <td>
                                            <input type="radio" id="rbtMonthRel" name="search">Por Mês: </input> 
                                            <h:selectOneMenu id="comboMonth">
                                                <f:selectItem itemValue="Escolha o Mês"/><f:selectItem itemValue="1"/><f:selectItem itemValue="2"/><f:selectItem itemValue="3"/><f:selectItem itemValue="4"/><f:selectItem itemValue="5"/><f:selectItem itemValue="6"/><f:selectItem itemValue="7"/><f:selectItem itemValue="8"/><f:selectItem itemValue="9"/><f:selectItem itemValue="10"/><f:selectItem itemValue="11"/><f:selectItem itemValue="12"/>
                                            </h:selectOneMenu> 
                                        </td>
                                        <td id="colInterval">
                                            <input type="radio" id="rbtIntervalRel" name="search">Entre datas: </input> 
                                            <h:inputText id="dateOne" onkeypress="mask(this,dateRange)" maxlength="10" />
                                            <h:outputText value="à"/>
                                            <h:inputText id="dateTwo" onkeypress="mask(this,dateRange)" maxlength="10" />
                                        </td>
                                        <td>
                                            <input type="radio" id="rbtAPRel" name="search">Por AP: </input> 
                                            <h:selectOneMenu id="comboAP">
                                                <f:selectItem itemValue="Escolha o AP"/>
                                            </h:selectOneMenu>
                                        </td>
                                        <td>
                                            <input type="radio" id="rbtRegionRel" name="search">Por Região: </input> 
                                            <h:selectOneMenu id="comboRegion">
                                                <f:selectItem itemValue="Escolha a Região"/>
                                            </h:selectOneMenu>
                                        </td>
                                        <td id="colInterval">
                                            <input type="button" id="btnOK" name="btnOK" value="OK" />
                                        </td>
                                    </tr>
                                </table>
                            </h:form>
                        </f:view>
                    </div>
                    
                    <div id="rodapeRelGen">
                        <label class="resultRelGen">Número de Acessos: </label><label class="resultRelGen">0</label><br>
                        <label class="resultRelGen">Número de Usuários: </label><label class="resultRelGen">0</label>
                    </div>
                    
                     <h:dataTable id="tableRelatorio" var="rel" value="{reportBean.lista}">   
                         
                         <h:column>  
                             <f:facet name="header" >
                                 <h:commandLink value="Data"></h:commandLink>
                             </f:facet>
                             
                             <h:outputText value="" />  
                         </h:column>  

                         <h:column>  
                             <f:facet name="header" >
                                 <h:commandLink value="Horário"></h:commandLink>
                             </f:facet>
                             
                             <h:outputText value="" />  
                         </h:column>  

                         <h:column> 
                             <f:facet name="header" >
                                 <h:commandLink value="Usuário"></h:commandLink>
                             </f:facet>
                             
                             <h:outputText value="" />  
                         </h:column> 

                         <h:column>  
                             <f:facet name="header" >
                                 <h:commandLink value="AP"></h:commandLink>
                             </f:facet>
                             
                             <h:outputText value="" />  
                         </h:column> 
                         
                     </h:dataTable>

jReportBean.java

@ManagedBean(name = "reportBean")  
@SessionScoped  
public class JReportBean {
    
    /*private Matriculado matriculado = new Matriculado();  
    private List<Matriculado> lista = new ArrayList<Matriculado>();  */

    public JReportBean() {  
     
    }  
    
    /*public List<Matriculado> getListaFiltrada(ActionEvent event) {  
        lista = JAPInfoDBManager.getHistoricalConnections(matriculado);  
        return lista;     
    }*/ 
}

Ao clicar, preciso que ele alimente a tabela abaixo, como mostrado no primeiro código… alguem pode me ajudar ?

Desde já agradeço.

7 Respostas

L

Tente fazer um botão ou uma chamada ajax que vá no seu managed bean e atualize a propriedade que o seu datatable popula, que pelo que vejo no seu caso é reportBean.lista

Se fizer chamada ajax lembra de colocar o atributo para renderizar o datatable na saída da chamada.

Porque você misturou atributos de html com atributos de jsf ?

Por exemplo tem input type=radio e input type text junto com h:inputText

W
<h:dataTable id="tableRelatorio" var="rel" value="{reportBean.lista}">     
                           
                         <h:column>    
                             <f:facet name="header" >  
                                 <h:commandLink value="Data"></h:commandLink>  
                             </f:facet>  
                               
                             <h:outputText value="#{rel.valorQueEstaNaListaParaRepresentarData}" />    
                         </h:column>    
  
                         <h:column>    
                             <f:facet name="header" >  
                                 <h:commandLink value="Horário"></h:commandLink>  
                             </f:facet>  
                               
                             <h:outputText value="#{rel.valorQueEstaNaListaParaRepresentarHora}" />    
                         </h:column>    
  
                         <h:column>   
                             <f:facet name="header" >  
                                 <h:commandLink value="Usuário"></h:commandLink>  
                             </f:facet>  
                               
                             <h:outputText value="#{rel.valorQueEstaNaListaParaRepresentarUsuario}" />    
                         </h:column>   
  
                         <h:column>    
                             <f:facet name="header" >  
                                 <h:commandLink value="AP"></h:commandLink>  
                             </f:facet>  
                               
                             <h:outputText value="#{rel.valorQueEstaNaListaParaRepresentarAP}" />    
                         </h:column>   
                           
                     </h:dataTable>
C

lele_vader:
Tente fazer um botão ou uma chamada ajax que vá no seu managed bean e atualize a propriedade que o seu datatable popula, que pelo que vejo no seu caso é reportBean.lista

Se fizer chamada ajax lembra de colocar o atributo para renderizar o datatable na saída da chamada.

Porque você misturou atributos de html com atributos de jsf ?

Por exemplo tem input type=radio e input type text junto com h:inputText

Brother, eu misturei pq nao conseguia por uma radio (selectOneRadio para o JSF) com um atributo do JSF também… nao conseguia alinhá-los… tipo: |selectOneRadio| |inputext| o input text ficava em cima… a minha solução foi por a radio em html

Sobre essa do ajax, como vc faria ? Nao tenho a minima noção sou iniciante em JSF e AJAX rs

L

Você vai usar a tag f:ajax

Você quer passar algum parâmetro para o managedBean ?
Como você quer que funcione esse carregamento do datatable ?

Você sabe se o jsf está conseguindo passar valores corretamente nessas tags html, pois o jsf é baseado em componentes.

C

lele_vader:
Você vai usar a tag f:ajax

Você quer passar algum parâmetro para o managedBean ?
Como você quer que funcione esse carregamento do datatable ?

Você sabe se o jsf está conseguindo passar valores corretamente nessas tags html, pois o jsf é baseado em componentes.

quero sim… tenho alguns campos, tipo data, mes que serao enviados ao managedbean quando clicar no botão.
ao clicar nesse botão eu vou pegar esses parametros e vou fazer a consulta no banco de dados, e os dados que eu retornar vao alimentar a datatable… entendeu ?

abs

V

Tópico movido para o fórum de Desenvolvimento Web.

Por favor, antes de postar um tópico, leia com atenção a lista de fóruns. JSF, Ajax, ManagedBeans já deixaram de ser assunto de “Java básico” há muito tempo.

L

Como eu disse antes.
Você vai ter que usar a tag f:ajax, passando os atributos que você quer que vão como parâmetros
Na sua requisição ajax você atualiza o seu atributo reportBean.lista, que dai irá atualizar a lista.

Criado 2 de agosto de 2012
Ultima resposta 7 de ago. de 2012
Respostas 7
Participantes 4