Anda di halaman 1dari 5

18/4/2015

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

Anda mungkin juga menyukai