2014-11-20 46 views
8

Pageable bir nesneyi aktaran bir yönteme sahip bir PagingandSorting Deposu var. Ayrıca URL aracılığıyla bir sayfalanabilir nesneyi kabul eden bir denetleyicim var.JPA Satılabilir Nesne için varsayılan sayfa boyutunu ayarla

Kullanım durumum, bir kullanıcı URL'de bir sayfa boyutu parametresi belirtirse, pageable nesne için bu değeri almalıyım. Eğer bahsetmiyorsa 50'lik bir varsayılan değer al.

Fakat pageable nesnesi şu anda varsayılan olarak 20'dir.

public String listClients(@ModelAttribute FilterForm form, Model model, WebRequest request, @PageableDefault(sort = { "surname", 
      "forename", "address.town" }, value = 50) Pageable pageable) { 

    } 

Yoksa yapılandırabilirsiniz: Bir Bahar Veri PagingAndSortingRepository bahsedecek olursak Herhangi Öneriler aşağıdaki gibi bir Kontrolör yöntemine @PageableDefault kullanarak varsayılan sayfa boyutunu ayarlayabilirsiniz

+0

JPA herhangi PagingAndSortingRepository aşina değilim. Bu bir Bahar Verisi sorusuysa lütfen durumun bu olduğunu belirtin. –

cevap

32

yardımcı olacağını

Aşağıda, hem XML hem de Java yapılandırmasında gösterildiği gibi Spring yapılandırmanızda aşağıdakileri kullanan genel bir varsayılan değer.

Yay Verilerinin daha yeni sürümlerinin sıfır temelli sayfa dizini oluştururken, eski sürümlerin ilk sayfa için 1 kullanıldığını unutmayın. UI sayfalama kütüphane ilk sayfası olarak 1 bekliyorsa o zaman true oneIndexedParameters özelliğini ayarlayabilirsiniz: http://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/web/PageableHandlerMethodArgumentResolver.html#setOneIndexedParameters-boolean-

public void setFallbackPageable

(sayfalanabilir fallbackPageable)

sayfalanabilir yapılandırır kullanılacak hiçbir PageableDefault veya PageableDefaults (yalnızca eski modda desteklenir) durumunda geri dönüş olarak, çözümlenecek yöntem parametresinde bulunabilir. Bunu null olarak ayarlarsanız, denetleyici yöntemlerinin, numaralı belgede null olarak atanacağını unutmayın. İstekte gösterilebilir veriler bulunabilir. Not , istekleri ile sayfa ve boyut parametresi sağlamanızı gerektirdiğinden, parametrelerinden herhangi biri için varsayılan ayar olmayacaktır.

Parametreler: fallbackPageable - genel geri dönüşümü olarak kullanılacak Pageable.

XML'de şuna benzer aşağıdaki: Java Config'de bu aşağıda benziyor

<mvc:annotation-driven> 
    <mvc:argument-resolvers> 
     <bean class="org.springframework.data.web.PageableHandlerMethodArgumentResolver"> 
      <property name="oneIndexedParameters" value="true"/> 
      <property name="fallbackPageable"> 
       <bean class="org.springframework.data.domain.PageRequest"> 
        <constructor-arg name="page" value="1" /> 
        <constructor-arg name="size" value="10" /> 
       </bean> 
      </property> 
     </bean> 
    </mvc:argument-resolvers> 
</mvc:annotation-driven> 

: tamlığı için,

@Configuration 
public class WebConfig extends WebMvcConfigurerAdapter { 


    @Override 
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { 
     PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver(); 
     resolver.setOneIndexedParameters(true); 
     resolver.setFallbackPageable(new PageRequest(1, 20); 
     argumentResolvers.add(resolver); 
     super.addArgumentResolvers(argumentResolvers); 
    } 
} 
+0

Teşekkürler, Alan. Ancak, genel yapılandırma için ad = "sayfa" değer = "0" dır, değil mi? – Mikhail

+0

Evet. Gerektiğinde eskiyi kullanmak için bunu geçersiz kılabilseniz de, bir noktada 1'den 0'a kadar olan temelde bir değişiklik oldu. Bir dakikam olduğunda güncellenirim. –

7

Ve burada Bahar için bir örnektir Önyükleme yapılandırması.

@Override 
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { 
    PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver(); 
    resolver.setFallbackPageable(new PageRequest(0, 50)); 
    argumentResolvers.add(resolver); 
    super.addArgumentResolvers(argumentResolvers); 
} 
0

Sağlanan cevaplar çok iyi ve çoğu durumda yardımcı olacaktır: WebMvcConfigurerAdapter uzanır @Configuration sınıfta, böyle 50 öğelerine varsayılan sayfa boyutunu ayarlayın. Bununla birlikte, model başına farklı varsayılan sayfa boyutu kullanmamı sağlayan ve Bahar veya sistem özellikleriyle yapılandırılabilen biraz farklı bir yaklaşım kullanıyorum.

Lütfen bu yaklaşımın bir temel sınırlaması olduğunu, yani bir istekle gelen herhangi bir boyutu kabul etmediğini unutmayın; Ancak sıralama bilgilerini kullanır. Bu nedenle, istek parametreleriyle sayfa başına döndürülen öğelerin sayısını değiştirme yeteneğine ihtiyacınız varsa, bu çözüm sizin için değildir. Her şeyden

Birincisi, ben eklemek bir denetleyici olarak bir istek Pageable ve yapılandırılmış sayfa boyutu

public static Pageable updatePageable(final Pageable source, final int size) 
{ 
    return new PageRequest(source.getPageNumber(), size, source.getSort()); 
} 

yeni Pageable örneği tabanını oluşturan bir yardımcı sınıf (veya denetleyici sadece bir yöntemi) oluşturuldu

@Value("${myapplication.model.items-per-page:20}") 
private int itemsPerPage; 

Ve sonra (yani yenioluşturmak geçersiz : varsayılan sayfa boyutunu tutan değişken (yapılandırma sağlanmazsa bu durumda varsayılan değer 20'dir) Talep işleme yöntemindeörneği) varsayılan sayfa boyutu:

@RequestMapping(method = RequestMethod.GET) 
public Page<Model> websites(final Pageable pageable) 
{ 
    return repository.findAll(updatePageable(pageable, itemsPerPage)); 
} 

Daha sonra da sistem özellikleri yapılandırılabilir farklı model/kontrol için farklı varsayılan sayfa boyutu değişkenler kullanır.

+0

Bu yaklaşımda, 'boyut'u istemeden ayarlayamazsınız. Her zaman varsayılan değerle geçersiz kılınacaktır. – djxak

+0

@djxak, evet, haklısınız. Sınırlama hakkında bilgi ekledim; Teşekkürler. – Tom

9

Bu hala iyi belgelenmiş değildir application.yml

spring.data.rest.default-page-size: 50 
+1

Bu ayarı işe koymanın birçok yolunu denedim ve etkilenmek istemiyor gibi görünmüyor (1.4.3.RELEASE) - herhangi bir öneriniz var mı? 'spring.data.rest.default-sayfa -boyutu: 99' – Larchy

0

ama başkasının bu makaleyi bulmak için aşağıda ayarlayabilirsiniz, RepositoryRestConfigurerAdapter orada bütün Yay Verileri dinlenme yapılandırma vardır.

@Configuration 
public static class RestConfig extends RepositoryRestConfigurerAdapter { 

    @Override 
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) { 
      config.setDefaultPageSize(50); 
    } 

} 
0

Sen sayfalanabilir param önce bu Ek Açıklama kullanabilirsiniz:

@PageableDefault(size = 40) 

// so your parameter should be like this: 
@PageableDefault(size = 40) Pageable pageable 
İlgili konular