2017-10-13 15 views
2

je l'adresse suivante sur ma page Web sur pagination Lorsque l'URL est modifiée, la page d'invite est introuvable. Jouer! + Scala

http://localhost:9000/employee?p=2 

je dois demander de page non trouvée chaque fois que le paramètre « p » est le changement. exemple:

http://localhost:9000/employee?b=2 

Le contrôleur doit entrer un notFound. Quel genre de condition vais-je faire pour le faire?

Référence:

Controller:

@Transactional(readOnly=true) 
public static Result list(int pageNum, int listSize) { 
    employeeMap.clear(); 
    Page page = appModel.page(pageNum, listSize); 
    employeeMap = ListUtil.getEmpMap(employeeMap, page.getEmpList()); 
    AppModel employees = new AppModel(employeeMap, searchMap); 
    /* if statement initiate a notFound page if pageNum us not the expected value */ 
    if (pageNum < 0 || pageNum > page.getPage().get("intLastPage")) { 
    return notFound("<h1>Page not found</h1>").as("text/html"); 
} 
    /* if statement that put a not search found message if no employee is found */ 
    if (page.getEmpList().size() == 0) { 
    flash("success", "There is no search results for the specified conditions"); 
} 
return ok(index.render(appModelForm.fill(employees),page)); 
} 

Routes:

# Employee list (look at the default values for pagination parameters) 
GET  /employee     controllers.Application.list(p:Int ?= 1,l:Int ?= 125) 

Répondre

1

Vous pouvez empêcher les gens de passer ce nom du paramètre global en changeant votre routage. Mais pour atteindre toutes les possibilités décrites par ce que vous voulez faire, vous pouvez faire ce qui suit:

GET  /employee/:p/:l  controllers.Application.list(p:Int ?= 1,l:Int ?= 125) 
    GET  /employee/p/:p   controllers.Application.list(p:Int, 125) 
    GET  /employee/l/:l   controllers.Application.list(1, l:Int) 

Cela dépend de la façon dont vous gérez l'URL appelant dans le modèle, mais si vous pouvez avoir cette auto-générer la paramètres par défaut dans l'URL si l'utilisateur ne les met pas, vous pouvez simplement garder le premier par lui-même.

L'URL pour appeler votre contrôleur va maintenant plutôt être:

http://localhost:9000/employee/p/2 
    http://localhost:9000/employee/l/4 
    http://localhost:9000/employee/2/4 

Et vous pouvez acheminer toute autre chose à une méthode de commande non trouvée:

GET  /employee/--String, empty or whatever else---  controllers.Application.returnNotFound 

@Transactional(readOnly=true) 
public static Result returnNotFound() { 

    return notFound("<h1>Page not found</h1>").as("text/html"); 

} 
+0

comment puis-je conditionner pour qu'il sachez qu'il prend une chaîne, des caractères spéciaux ou vide dans cette instruction '/ employee/- Chaîne, vide ou autre chose ---'? – NoobProgrammer

+0

aurais-je besoin d'utiliser regex comme ceci '/ employee/$ p'? – NoobProgrammer

+1

Vous pouvez: https://www.playframework.com/documentation/2.6.x/ScalaRouting#Dynamic-parts-with-custom-regular-expressions – NateH06