I'm trying to customize the Play framework -Computer database with Java example. However, I can't seem to get the submit button on the "edit" page to work(annotated). Here's the form:
@(id: Long, computerForm: Form[Provider])
@import helper._
@implicitFieldConstructor = @{ FieldConstructor(twitterBootstrapInput.render) }
@main {
<h1>Provide fb*emphasized text*</h1>
@form(routes.Application.update(id)) {
<fieldset>
@inputText(computerForm("fb"), '_label -> "Feedback", '_help -> "")
@inputText(computerForm("rating"), '_label -> "Rating", '_help -> "")
</fieldset>
<div class="actions">
<!-- This button does nothing!-->
<input type="submit" value="Submit fb!" class="btn primary"> or
<a href="@routes.Application.list()" class="btn">Cancel</a>
</div>
}
}
And here's the update
method from Application.java
:
public static Result update(Long id) {
Form<Provider> computerForm = form(Provider.class).bindFromRequest();
if(computerForm.hasErrors()) {
return badRequest(editForm.render(id, computerForm));
}
computerForm.get().update(id);
flash("success", "Provider " + computerForm.get().fullname + " has been updated");
return GO_HOME;
}
What am I doing wrong?
EDIT- More details.
Model: Provider.java
/**
* Company entity managed by Ebean
*/
@Entity
public class Provider extends Model {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long id;
@Constraints.Required
public String fullname;
public String tech;
public String experience;
public String email;
public String feedback;
public int rating;
/**
* Generic query helper for entity Provider with id Long
*/
public static Model.Finder<Long, Provider> find = new Model.Finder<Long, Provider>(Long.class, Provider.class);
public static Map<String, String> options() {
LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
for (Provider c : Provider.find.orderBy("tech").findList()) {
options.put(c.id.toString(), c.fullname);
}
return options;
}
public static Page<Provider> page(int page, int pageSize, String sortBy, String order, String filter) {
return find.where().ilike(sortBy, "%" + filter + "%").findPagingList(pageSize).setFetchAhead(false)
.getPage(page);
}
}
Question 2: What happens when I click the button : Nothing visible. But when I look real close, it seems to redirect to the same page (the update page). But based on the controller I'd expect it to go back back to the home page based on the GO_HOME
variable.
Application.java
package controllers;
import play.mvc.*;
import play.data.*;
import static play.data.Form.*;
import views.html.*;
import models.*;
/**
* Manage a database of Providers
*/
public class Application extends Controller {
/**
* This result directly redirect to application home.
*/
public static Result GO_HOME = redirect(
routes.Application.list(0, "fullname", "asc", "")
);
/**
* Handle default path requests, redirect to computers list
*/
public static Result index() {
return GO_HOME;
}
/**
* Display the paginated list of Providers.
*
* @param page Current page number (starts from 0)
* @param sortBy Column to be sorted
* @param order Sort order (either asc or desc)
* @param filter Filter applied on computer names
*/
public static Result list(int page, String sortBy, String order, String filter) {
return ok(
list.render(
Provider.page(page, 10, sortBy, order, filter),
sortBy, order, filter
)
);
}
/**
* Display the 'edit form' of a existing Computer.
*
* @param id Id of the computer to edit
* // TODO : Fix wiring and button actions
*/
public static Result edit(Long id) {
Form<Provider> computerForm = form(Provider.class).fill(
Provider.find.byId(id)
);
return ok(
editForm.render(id, computerForm)
);
}
/**
* Handle the 'edit form' submission
*
* @param id Id of the computer to edit
*/
public static Result update(Long id) {
Form<Provider> computerForm = form(Provider.class).bindFromRequest();
if(computerForm.hasErrors()) {
return badRequest(editForm.render(id, computerForm));
}
computerForm.get().update(id);
flash("success", "Computer " + computerForm.get().fullname + " has been updated");
return GO_HOME;
}
/**
* Display the 'new Provider form'.
*/
public static Result create() {
Form<Provider> computerForm = form(Provider.class);
return ok(
createForm.render(computerForm)
);
}
/**
* Handle the 'new Provider form' submission
*/
public static Result save() {
Form<Provider> computerForm = form(Provider.class).bindFromRequest();
if(computerForm.hasErrors()) {
return badRequest(createForm.render(computerForm));
}
computerForm.get().save();
flash("success", "Provider " + computerForm.get().fullname + " has been created");
return GO_HOME;
}
}