Pergunta

Eu quero mostrar uma lista de todos os usuários no meu site, mas eu só quero mostrar 10 pessoas por idade. Eu não sei exatamente como fazer isso. Eu sei como fazê-lo por apenas exibir todos os usuários em uma página, mas isso não é muito bom não é?

Se eu fizer isso com o código que eu tenho agora, ele só irá obter os primeiros usuários dez e outra vez. Eu quero ser capaz de obter todos os usuários para uma consulta uma vez, armazená-lo globalmente e, em seguida, percorrer a lista recuperar o próximo 10 e assim por diante para exibição.

Estou desenvolvendo em appengine usando Java e Spring Framework algumas das soluções que eu estive pensando sobre,

  1. loja na sessão e percorrer a lista (muito ruim eu acho)
  2. mão-lo para o JSP, especificamente para um dos escopos, página, solicitação etc. Mas penso pedido não vai funcionar.
  3. Procure um controlador de Primavera que pode lidar com isso.
Foi útil?

Solução

De um modo geral, você usaria uma variável de formulário em sua página (via GET ou POST) chamado 'página', o que seria um número. Quando você receber que no servlet você calcular um intervalo com base no número de página e linhas configurado por página.

Dê uma olhada paginação através de grandes conjuntos de dados (sim, é Python, mas os mesmos princípios se aplicam) e Consultas e índices do Google app Engine documentação.

Outras dicas

Se você manter o tamanho da página em 10, então você pode recuperar seus usuários 10 por faixa etária para cada página com base no número da página:

SELECT TOP 10 users FROM myusers 
 WHERE AGE = function(page_number) 
 ORDER BY some_ordering

Espero que o apoio appengine JPA + tal tipo de consulta.

Alguns motores de banco de dados fornecem extensões úteis para SQL apenas para este fim. Como, no MySQL você pode dizer algo como "escolha ... o que quer ... limite de 50,10", onde "50" é a linha para começar e 10 é o número de linhas para recuperar. Em seguida, na sua página de exibição que você simplesmente colocar seguintes e anteriores botões que passam o apropriado começando número da linha de volta para o servidor para a próxima corrida na consulta.

Se o motor SQL que você está usando não tem essa função útil, então você tem que construir uma específicos de consulta cláusula "where" com base na ordem de classificação.

Para tomar um exemplo simples, suponha que no seu exemplo você está exibindo os registros em ordem por "user_name". Você pode usar Statement.setMaxRows (10) para limitar quaisquer consultas para 10 linhas. Então, em sua primeira chamada de executar, digamos, "select ... o que quer ... a partir de pedido de usuário por user_name". Salvar o último user_name encontrados. Em sua próxima botão, você passar este user_name de volta ao servidor, e a consulta para a próxima chamada é "escolha ... o que quer ... a partir de usuário onde user_name> 'xxx' ordem por user_name", onde 'xxx' é o última user_name da chamada anterior. Será que os setMaxRows novamente assim que você está novamente limitada a 10 linhas de saída. Você pode deixar que o usuário passo através de toda a produção desta forma.

Deixando os para trás utilizador Go é um pouco de dor. Eu tenho feito isso por manter uma mesa em uma variável de sessão com o valor da chave de partida para cada página.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top