Playframework:play.data.Form.fill<T>(T 值)不会填充表单



我使用的是Playframework 2.8.x,我想在控制器中填充一个play.data.Form,并将填充的副本传递到前端,在那里我想在视图模板中使用它来用保存的值预填充表单(用于编辑(。然而,fill方法——据我所知——应该返回表单的COPY,该表单已经用传递的对象字段作为值填充,但它没有被填充。有什么线索吗?

下面是一些示例代码:

public class Application extends Controller {
private Form<User> userForm;
final static Logger logger = LoggerFactory.getLogger("controllers.Application");

@Inject 
public HomeController(FormFactory formFactory, MessagesApi messagesApi) {
this.userForm = formFactory.form(User.class);
this.messagesApi = messagesApi;
}
public Result editProfile(Request request) {

User activeUser = User.find.query().where().eq("email", "example@test.de").findOne();
logger.info("User - Firstname: " + activeUser.getFirstName());
userForm = userForm.fill(activeUser);
logger.info("userForm - raw data: " + userForm.rawData());
logger.info("userForm: " + userForm);

return ok(editProfile.render(userForm, request, messagesApi.preferred(request)));
}
}

成功地从数据库中检索到用户(第一个日志将正确的名称写入控制台,而第二个和第三个日志显示表单确实为空:

userForm - raw data: {}
userForm: Form(of=class models.User, data={}, value=Optional[User [email= example@test.de]], errors=[])

为什么不填充表单?

已解决:表单实际上一直在填充。它只是没有携带任何";生的";数据表单的值属于可选类,可以在前端检索,如下所示:

@userForm.value().get().getEmail()

其中userForm.value((为Optional,get((为实际User,getEmail((是我对Model User上的字段电子邮件的getter方法。

最新更新