java – 在Play中发布bindFromRequest!框架2.3
|
我试图使用Play的自动绑定功能,没有成功.我正在 Java中开发,在 Eclipse 4.4 Luna上. 这是我的形式: <h2>Create a new user</h2>
<form action="@routes.Backend.createUser()" method="post">
First Name
<input type="text" name="firstName" />
Last Name
<input type="text" name="lastName" />
E-mail
<input type="email" name="email" />
PIN
<input type="number" name="pin" />
Status
<input type="text" name="status" />
Is guest?
<input type="checkbox" name="isGuest" />
<input type="submit" value="Create user" />
</form>
这是我的课“用户”: @Entity
public class Users extends Model {
// Database columns
@Id
public int userId;
public String firstName;
public String lastName;
public String email;
public int pin;
public String status;
public boolean isGuest;
}
这里是我的控制器: public class Backend extends Controller {
public static Result createUser() {
Form<Users> form = Form.form(Users.class).bindFromRequest();
if (form.hasErrors()) {
// doSomething()
} else {
Users u = form.get();
u.save();
}
// TESTING
// Checking the content of the request
DynamicForm requestData = Form.form().bindFromRequest();
String firstName = requestData.get("firstName");
String lastName = requestData.get("lastName");
// Printing the content works,I am able to see the correct values
System.out.println(firstName); // Bob
System.out.println(lastName); // Smith
// This somehow doesn't work...
System.out.println(u.firstName); // NULL
System.out.println(u.lastName); // NULL
System.out.println(u.userId); // Correctly generated
// END OF TESTING
return redirect(routes.Backend.allUsers());
}
}
我不知道为什么值的自动绑定不起作用.我确保我的表单中的字段名称对应于类中的属性名称,这应该足以使表单绑定工作,对吧? 我使用Eclipse Luna,我关闭了自动项目构建(我从控制台手动进行).我知道有时Eclipse可能会因为自动构建功能而导致问题.注意:这是要去的方式,但是我没有使用激活程序命令清理项目,就像Dmitri用户建议的那样.此外,只需要在Eclipse中启动自动构建功能即可,只需执行一次. 我已经尝试重新启动Eclipse和应用程序几次,没有成功… 编辑: 编辑2: 编辑3: 编辑4: 编辑5: Formatters.register(User.class,new Formatters.SimpleFormatter<User>() {
@Override
public User parse(String arg0,Locale arg1) throws ParseException {
User u = new Model.Finder<Integer,User>(Integer.class,User.class).byId(Integer.parseInt(arg0));
return u;
}
@Override
public String print(User arg0,Locale arg1) {
return "User : " + arg0.firstName;
}
});
…但它没有工作! 编辑6: 解决方法我一直在努力解决完全相同的问题:bindFromRequest为“name”字段返回null.我在这个Play for Java简介视频中做了一个完全一样的人:youtube.com/watch?v = bLrmnjPQsZc.但还是没有运气.我一直在使用JDK 1.8的Windows 7. IDE:Eclipse 4.4.0.我通过cygwin运行激活器. 这是什么解决了我的问题: >在Eclipse中:项目 – >自动建立 – >关掉 之后,bindFromRequest正确绑定名称并将其放入数据库. (编辑:十堰站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
