Primefaces|DicasdeProgramao
DicasdeProgramao
PaginaodeDadosparaValerJSF2comJPA
27DEJUNHODE2012 2COMENTRIOS
(HTTPS://BOTELHOJP.WORDPRESS.COM/2012/06/27/DICASPROGRAMACAO/#COMMENTS)
Algunssistemasdizemrealizarpaginaodedados.Noentantoemmuitoscasoso
programadorutilizaasfacilidadesdoJSFpararealizarapaginaoapenasnacamadavisual,ou
seja,namemriadoservidordeaplicao.
Muitostemdvidasdecomofazerapaginaonobancodedadosutilizandoumaferramentade
mapeamentoobjetorelacionaleprincipalmentecomointegrarestapaginaoaoJSF.
Nesteartigodescrevereideformaprticacomorealizarumapaginaodedadoscompleta,ouseja,
iniciandopelacamadavisual(JSF2Primefaces)atacamadadeacessoadados.Almdisso
implementaremososrecusosdeordenaodedadosefiltroconformeocomponentep:dataTabledo
Primefacesutiliza.
(https://botelhojp.files.wordpress.com/2012/06/captura_de_tela1.png)
VamoscriarnestenossoexemploaentidadeCompromisso:
1
2
3
4
5
6
7
8
publicclassCompromisso{
@Entity
@Table(name="compromisso",uniqueConstraints={@UniqueConstraint(columnNa
publicclassCompromissoimplementsSerializable{
privatestaticfinallongserialVersionUID=1L;
@Id
https://botelhojp.wordpress.com/tag/primefaces/
1/5
18/4/2015
9
10
11
12
13
14
15
16
17
18
19
20
21
Primefaces|DicasdeProgramao
@GeneratedValue
privateLongid;
@Column
@NotNull
privateStringnome;
@Column
@NotNull
privateStringdescricao;
//getsesets
}
AgoravamoscriarapginaJSFqueexibiralistadecompromissos:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<p:dataTablevar="bean"
value="#{compromissoListMB.dataModel}"paginator="true"rows="10"
paginatorTemplate="{RowsPerPageDropdown}{FirstPageLink}{PreviousPag
rowsPerPageTemplate="3,5,10,15"
selectionMode="single"
selection="#{compromissoListMB.selectedBean}"
lazy="true">
<f:facetname="header">ListadeCompromissos</f:facet>
<p:columnstyle="width:5%;"sortBy="#{bean.id}"filterBy="#{bean.id}"
<f:facetname="header">ID</f:facet>
<h:outputTextvalue="#{bean.id}"/>
</p:column>
<p:columnsortBy="#{bean.nome}"filterBy="#{bean.nome}">
<f:facetname="header">Nome</f:facet>
<h:outputTextvalue="#{bean.nome}"/>
</p:column>
<p:columnsortBy="#{bean.descricao}"filterBy="#{bean.descricao}">
<f:facetname="header">Descricao</f:facet>
<h:outputTextvalue="#{bean.descricao}"/>dd
</p:column>
</p:dataTable>
Precisamoscriaromanagedbeanquepopularatabelapormeiodeumaestruturadenomindade
DataModel
1
2
3
4
5
@ManagedBean
@RequestScoped
publicclassCompromissoListMB{
privateLazyDataModel<Compromisso>dataModel;
https://botelhojp.wordpress.com/tag/primefaces/
2/5
18/4/2015
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Primefaces|DicasdeProgramao
privateCompromissoselectedBean;
@PostConstruct
publicvoidinit(){
//faltainseriraquiocdigoquepopularodatamodel;
}
publicLazyDataModel<Compromisso>getDataModel(){
returndataModel;
}
publicCompromissogetSelectedBean(){
returnselectedBean;
}
publicvoidsetSelectedBean(CompromissoselectedBean){
this.selectedBean=selectedBean;
}
}
NotequedeclaramosnossodataModelcomumLazyDataModelqueaimplementaopadrode
DataModeldoPrimefaces.Porsetratardeumaclasseabstrataprecisamosimplementartrs
mtodos:
load:queretornaalistadebeansreferenteapginasolicitada
getRowKey:queretornooobjetocorrentedatabela
getRowCount:queinformaquantosregistrosforamencontradosnaconsulta
Vamoscriarnossodatamodelnomtodoinitdonossomanagedbean.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@PostConstruct
publicvoidinit(){
dataModel=newLazyDataModel<Compromisso>(){
privatestaticfinallongserialVersionUID=1L;
@Override
publicList<Compromisso>load(
intfirst,intpageSize,
StringsortField,SortOrdersortOrder,
Map<String,String>filters){
returnlistarPaginado(first,pageSize,sortField,sortOrder,filt
}
@Override
publicObjectgetRowKey(Compromissoitem){
returnitem;
}
@Override
https://botelhojp.wordpress.com/tag/primefaces/
3/5
18/4/2015
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Primefaces|DicasdeProgramao
publicintgetRowCount(){
returnrowCount;
}
privateList<Compromisso>listarPaginado(
intstartIndex,intpageSize,
StringsortField,SortOrdersortOrder,
Map<String,String>filters){
//criacaodoentitymanager
EntityManagerFactoryentityManagerFactory=Persistence.createEnt
EntityManagerentityManager=entityManagerFactory.createEntityMa
//criacaodocritriodebusca
CriteriaBuilderbuilder=entityManager.getCriteriaBuilder();
CriteriaQuery<Compromisso>cQuery=builder.createQuery(Compromis
Root<Compromisso>from=cQuery.from(Compromisso.class);
CriteriaQuery<Compromisso>select=cQuery.select(from);
//filtrovindododatatable
List<Predicate>predicates=newArrayList<Predicate>();
for(Iterator<String>it=filters.keySet().iterator();it.hasNex
StringfilterProperty=it.next();
StringfilterValue=filters.get(filterProperty);
Expressionexpression=(Expression)from.get(filterProperty)
predicates.add(builder.like(expression,filterValue+"%"
}
select.where(predicates.toArray(newPredicate[]{}));
//ordenacaovindododatatable
if(sortField!=null){
switch(sortOrder){
caseASCENDING:
select.orderBy(builder.asc(from.get(sortField)));
break;
caseDESCENDING:
select.orderBy(builder.desc(from.get(sortField)));
break;
}
}
//obterototalderegistrosdaconsulta
CriteriaQuery<Long>countQuery=builder.createQuery(Long.class
countQuery.select(builder.count(countQuery.from(Compromisso.class
entityManager.createQuery(countQuery);
rowCount=(int)(entityManager.createQuery(countQuery).getSingle
//realizaraconsultapaginada
TypedQuery<Compromisso>listQuery=entityManager.createQuery(sel
listQuery.setFirstResult(startIndex);
listQuery.setMaxResults(pageSize);
//retornaalistapaginada
returnlistQuery.getResultList();
https://botelhojp.wordpress.com/tag/primefaces/
4/5
18/4/2015
76
77
78
Primefaces|DicasdeProgramao
}
};
}
Obs.:ParasimplificarocdigorealizamosoacessoaobancodentrodaclasseMB.Emsua
aplicaoindicamosaquebrardestecdigomovendoaparteJPAparasuacamadade
persistncia.
Esperoqueoartigopossaauxiliarsuaprximaimplementaodepaginao!
FILEDUNDERPROGRAMAO
PROGRAMAO
DicasdeProgramao
Seguir
TAGGEDWITHJAVA,JPA,JSF2,PRIMEFACES,
CreateafreewebsiteorblogatWordPress.com.TheEnterpriseTheme.
FollowDicasdeProgramao
BuildawebsitewithWordPress.com
https://botelhojp.wordpress.com/tag/primefaces/
5/5