저는 Play 2.3을 처음 접했고 양식과 데이터 바인딩에 많은 어려움을 겪었습니다. 다음은 두통을 불러 일으키는 시나리오입니다.Play Form은 데이터 모델에서 생략 된 필드를 전송하지 않습니다
나는 f.e.와 같은 모델을 가지고 있습니다. (주석 왼쪽으로) : 내가 좋아하는 내 컨트롤러에서이보기를 호출
@(userForm: Form[User])
@helper.form(action = routes.UserController.save()) {
@helper.inputText(userForm("name"), '_label -> "Name")
}
:
public class User extends Model {
public Integer id;
public String name;
public String anyOtherField;
}
지금 내가 사용자 이름을 변경할 수 있도록 원하는 scala.view에서 양식을 이 :
public static Result save() {
Form userForm = Form.form(User.class).bindFromRequest();
User user = userForm.get()
}
012 : 사용자가 내가 그렇게 내 컨트롤러에 돌아 왔어요 양식을 제출
Form<User> userForm = Form.form(User.class).fill(myUser);
return ok(views.html.usermgmt.useredit.render(userForm));
그러나 지금은 놀랍습니다. userForm.get()
의 결과 사용자는 "이름"이외의 입력란이 없습니다. "id"없음, "anyOtherField"없음. 결과 객체가 추가 처리를 위해 전혀 쓸모가 없을 때 데이터 바인딩을 갖는 점은 무엇입니까? 내가 놓친 게 있니? 내가 뭔가를 놓치지 않는 경우
다음 내가하기 위해 상용구 코드를 많이 쓰고있는 자신을 데이터 바인딩 :
- 중 하나를 수동으로 실제 "사용자"개체에 대한 변경 필드를 지정합니다 (이
save()
내에서 다시 가져와야 함) - 또는 모델의 모든 입력란에 숨김 필드를 포함하십시오. 이 경우 모델에 다른 필드를 추가하면 양식을 업데이트하는 것을 잊지 않는 것이 좋습니다.
제게 sth가 누락되었다고 알려주세요.
브라우저에 데이터 (사용자 이름 만)가 전송 될 때만 폼이 이름 필드를 추가하기 때문에 Plays가 구문 분석합니다. 바인딩이라는 아이디어는 브라우저에서 가져온 데이터를 객체에 바인딩하는 것입니다. [이 답변] (http://stackoverflow.com/a/10380119/1205368) 일부 상용구를 피할 수 있습니다 – Salem