我无法找到如何为我的表单实现单选按钮。我需要在该组中有5个辐射按钮,表示从1到5的等级。
形式:
public static class MobileWriteReview {
@Constraints.MinLength(1)
@Constraints.MaxLength(32)
@Constraints.Required
public String firstName;
@Constraints.MinLength(1)
@Constraints.MaxLength(32)
@Constraints.Required
public String lastName;
@Constraints.MinLength(5)
@Constraints.Required
public String password;
@Constraints.MinLength(5)
@Constraints.Required
public String repeatPassword;
@Constraints.Required
public int grade;
@Constraints.MinLength(30)
@Constraints.Required
public String text;
/**
* Required by play.
*/
public MobileWriteReview() {
}
public MobileWriteReview(int grade) {
this.grade = grade;
}
}
控制器方法:
private static final Form<MobileWriteReview> MOBILE_WRITE_REVIEW_FORM = form(MobileWriteReview.class);
public static Result review(){
MobileWriteReview mobileWriteReview = new MobileWriteReview(3);
MOBILE_WRITE_REVIEW_FORM.fill(mobileWriteReview);
return ok(mobileInviteToReview.render(MOBILE_WRITE_REVIEW_FORM));
}
public static Result doReview(){
final Form<MobileWriteReview> filledForm = MOBILE_WRITE_REVIEW_FORM.bindFromRequest();
if (filledForm.hasErrors()) {
// User did not fill everything properly
return badRequest(mobileInviteToReview.render(filledForm));
} else {
// Everything was filled
return ok();
}
}
view.scala.html
@(inviteForm: Form[_])
@styles = {
}
@scripts = {
}
@import helper._
@helper.form(routes.MobileInviteToReview.doReview) {
@if(inviteForm.hasGlobalErrors) {
<p class="error">
<span class="label label-important">@inviteForm.globalError.message</span>
</p>
}
@inputRadioGroup(
// appropriate code here
)
}
所以我的问题是我如何在控制器中设置表单然后在视图中使用它?
答案 0 :(得分:2)
首先,在控制器中呈现表单时,代码出错。
解决方案可能如下所示:
控制器:
private static final Form<MobileWriteReview> MOBILE_WRITE_REVIEW_FORM = Form.form(MobileWriteReview.class); // this field declared as final
public static Result review(){
MobileWriteReview mobileWriteReview = new MobileWriteReview(4);
Logger.info("Mobile Write Review grade = " + mobileWriteReview.grade);
// this is proper way to fill the form using existing value
return ok(views.html.mobileInviteToReview.render(MOBILE_WRITE_REVIEW_FORM.fill(mobileWriteReview)));
}
public static Result doReview(){
final Form<MobileWriteReview> filledForm = MOBILE_WRITE_REVIEW_FORM.bindFromRequest();
MobileWriteReview mobileWriteReview = filledForm.get();
Logger.info("Grade submitted = " + mobileWriteReview.grade);
if (filledForm.hasErrors()) {
// User did not fill everything properly
return badRequest(views.html.mobileInviteToReview.render(filledForm));
} else {
// Everything was filled
return ok("Grade submitted = " + mobileWriteReview.grade);
}
}
观点:
@(inviteForm: Form[models.MobileWriteReview])
@import views.html.helper._
@main(title = "Input Radio Group Sample") {
@form(action = routes.Application.doReview()) {
@****** This helper can accomodate selected value of radio button if present *****@
@inputRadioGroup(
inviteForm("grade"),
options = options("1" -> "1", "2" -> "2", "3" -> "3", "4" -> "4", "5" -> "5")
)
<input type="submit" value="Post">
}
}
请参阅inputRadioGroup
助手here的文档。