2017-10-13 4 views
2

Ich habe die folgende URL auf meiner Webseite auf PaginierungWenn die URL geändert wird, wird die Eingabeaufforderung nicht gefunden. Abspielen! + Scala

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

ich nicht gefunden Seite zu veranlassen müssen, wenn der Parameter „p“ Veränderung ist. Beispiel:

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

Es Controller zur Eingabe eines NOTFOUND benötigen. Welche Art von Bedingung werde ich tun, um dies zu tun?

Referenz:

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)); 
} 

Routen:

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

Antwort

1

Sie Menschen aus Schalt diesen Namen des Parameters Gesamt, indem Sie Ihre Routing verhindern könnte. Aber zu erreichen alle skizzierten Möglichkeiten, was Sie tun möchten, können Sie Folgendes tun:

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) 

Es hängt davon ab, wie Sie die URL Griff in der Vorlage nennen, aber wenn Sie diese haben können automatisch generieren die Standardparameter in die URL, wenn der Benutzer sie nicht eingibt, könnten Sie einfach die erste selbst behalten.

Die URL des Controllers beschwören wird nun stattdessen sein:

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

Und dann können Sie Route, etwas anderes zu einem nicht Controller-Methode gefunden:

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

, wie ich es für sie bedingen kann Wissen Sie, dass es Zeichenfolgen, Sonderzeichen oder leer in dieser Anweisung '/ employee/- String, empty oder was auch immer --- 'nimmt? – NoobProgrammer

+0

müsste ich Regex wie diese '/ Mitarbeiter/$ p' verwenden? – NoobProgrammer

+1

Sie können sicher: https://www.playframework.com/documentation/2.6.x/ScalaRouting#Dynamic-parts-with-custom-regular-expressions – NateH06

Verwandte Themen