Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error Missing parameter in call definition: String

I'm new with play 2.0. I created a signup form and now I try to create a search form. But I was caught by this error: " Missing parameter in call definition: String In /home/thangnk/Task/conf/routes at line 17. " .

Here is my code :

CONTROLLER --- Search.java

package controllers;

import java.util.ArrayList;
import java.util.List;

import models.Task;
import play.*;
import play.data.Form;
import play.db.ebean.Model.Finder;
import play.mvc.*;

import views.html.*;

public class Search extends Controller{
    static Form<Task> myform = form(Task.class);
    public static Result search(){
        return ok(search.render());
    }
    public static Result searchByusername(String username){
        Form<Task> filledForm = myform.bindFromRequest();
        username=filledForm.get().username;
        return ok(result_search.render(username));
    }   
}

MODELS --- Task.java

package models;

import java.util.*;

import javax.persistence.Entity;
import javax.persistence.Id;

import play.data.validation.Constraints.Email;
import play.data.validation.Constraints.MaxLength;
import play.data.validation.Constraints.MinLength;
import play.data.validation.Constraints.Required;
import play.db.ebean.Model;
import play.db.ebean.Model.Finder;

@Entity
public class Task extends Model {
    @Id
    public static Long id;

    //  @Required
    //  @MinLength(6)
    //  @MaxLength(12)
    public String password;

    @Email
    public String email;

    //  @MinLength(6)
    public String username;

    public Task() {
    }

    public Task(Long id, String username, String email, String password) {
        this.email = email;
        this.username = username;
        this.id = id;
        this.password = password;
    }

    public static Finder<Long, Task> find = new Finder(Long.class, Task.class);

    public static List<Task> all() {
        return find.all();
    }

    public static void create(Task task) {
        task.save();
    }

    public static void delete(Long id) {
        find.ref(id).delete();
    }

    public static List<Task> searchByusername(String name) {
        return find.where().like("username", "%" + name + "%").findList();
    }
}

ROUTES

GET     /                           controllers.Application.index()
GET     /tasks          controllers.Application.tasks()
POST    /tasks          controllers.Application.newTask()
POST    /tasks/:id/delete           controllers.Application.deleteTask(id:Long)

# POST  /showuser       controllers.Application.showUser()

# Search
GET    /search             controllers.Search.search()
POST   /result_search/:String      controllers.Search.searchByusername(username:String) 
-------// This error mark at line "username : String" ----------------------------------
# Map static resources from the /public folder to the /assets URL path
GET     /assets/*file               controllers.Assets.at(path="/public", file)

TERMINAL ----

[error] {file:/home/thangnk/Task/}Task/compile:sources: in /home/thangnk/Task/conf/routes - PlayException: Compilation error [Missing parameter in call definition: String]
[error] application - 

! Internal server error, for request [GET /search] ->

sbt.PlayExceptions$RoutesCompilationException: Compilation error [Missing parameter in call definition: String]
    at sbt.PlayCommands$$anonfun$52.apply(PlayCommands.scala:433) ~[na:na]
    at sbt.PlayCommands$$anonfun$52.apply(PlayCommands.scala:423) ~[na:na]
    at sbt.Scoped$$anonfun$hf3$1.apply(Structure.scala:474) ~[na:na]
    at sbt.Scoped$$anonfun$hf3$1.apply(Structure.scala:474) ~[na:na]
    at scala.Function1$$anonfun$compose$1.apply(Function1.scala:41) ~[scala-library.jar:0.11.3]
    at sbt.Scoped$Reduced$$anonfun$combine$1$$anonfun$apply$11.apply(Structure.scala:295) ~[na:na]

Hope u guys help me solved it and help me to complete this form.

like image 938
Mèo Béo Avatar asked Jul 15 '13 09:07

Mèo Béo


1 Answers

It's in your routes file, you inverted the parameter name and type:

 POST   /result_search/:username      controllers.Search.searchByusername(username:String)
like image 62
ndeverge Avatar answered Sep 30 '22 13:09

ndeverge