Customizando propriedade sortBy do primefaces

O Primefaces disponibiliza a propriedade sortBy em alguns de seus componentes(p:column, p:dataTable) para fazer ordenação dos dados, essa propriedade espera um atributo do objeto declarado na propriedade var, por exemplo: sortBy=”#{categoria.descricao}”.

Por padrão a ordenação utiliza os critérios de desc e asc de acordo com a configuração ou seleção do usuário, no entanto podemos nos deparar com a necessidade de alterar a forma de ordenação na apresentação dos dados, como por exemplo quando formos fazer um relatório de categorias por total e precisamos apresentar categoria na ordem Y, X, Z, não seguindo uma ordem de ordenação padrão de crescente ou decrescente.

Para isso o Primefaces já tem uma solução, customizar a forma de ordenação que será aplicada no atributo sortBy, isso é possível usando o atributo sortFunction, que permite a criação de um método no código java para definir os critérios de ordenação.

Exemplo

categorias.xhtml

<p:dataTable var="categoria" value="#{categoriaController.categorias}" 
   sortBy="#{categoria.descricao}" sortFunction="#{categoriaController.customDescricaoSort}">
   <p:column headerText="Descrição"  >
     <h:outputText value="#{categoria.descricao}"/>
   </p:column>
   <p:column headerText="Total"  >
     <h:outputText value="#{categoria.total}"/>
   </p:column>
</p:dataTable>
  • sortBy: Propriedade recebe um atributo do objeto declaro no var;
  • sortFunction: Recebe um método que tem como retorno um int, semelhante ao compareTo.

CategoriaController.java

...
private static final Map<String, Integer > ORDEM_DESCRICAO = ImmutableMap.of("Categoria Y", 0, "Categoria X", 1, "Categoria Z", 2);

public int customDescricaoSort(Object val1, Object val2) {
    final String descricao1 = (String) val1;
    final String descricao2 = (String) val2;
	return ORDEM_DESCRICAO.get(descricao1).compareTo(ORDEM_DESCRICAO.get(descricao2));
}
  • (String) val1: O casting é de acordo com o tipo do atributo referenciando na propriedade sortBy;
  • customDescricaoSort(Object val1, Object val2): É a mesma idéia do método compareTo, o método recebe dois Objects para que seja possível implementar os critérios de ordenação.
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s