在我的方法中,我让我们说UserDetails对象有一些定义的值,如id,phone等。 用户只通过表格,即电子邮件更改一个值。是我如何使用方法
的方式userDetailsForm.bindFromRequest(new String[]{"email"}).get()
不要松散'以前的值?上面的示例为我提供了仅具有已定义的电子邮件字段的新userDetail对象。当然我知道我可以使用DynamicForm类,或者只是
userDetailsForm.bindFromRequest().get().getEmail()
但是让方法在一行中完成所有这些绑定会很有帮助。
====== EDIT
DynamicForm dynamicForm = Form.form().bindFromRequest();
String email = dynamicForm.get("email");
不是我正在寻找的东西。
====== EDIT ================================== ====
换句话说,我想将表单分为3个步骤,但是在每个步骤之后我都在对DB进行更新。因此,例如当我发布第2步时,我有来自上一步的值的对象:
User [userId=8, createdById=12, name=null, active=false, country=EN]
所以现在我正在做的事情:
static Form<User> userForm = Form.form(User.class);
User user = User.find(8);
User user2 = (User) userForm.fill(user).bindFromRequest("name").get();
我正在使用空字段设置新对象:
User [userId=0, createdById=0, name="value from step 2", active=false, country=null]
我会非常满意任何建议。
答案 0 :(得分:0)
试试这个
Form<UserDetail> submittedForm = form(UserDetail.class).bindFromRequest();
String emailID = submittedForm.data().get("email");
data()
将保留名称和值对,例如关注Map<String, String>
,通过在get()
中提供其键名来进一步检索值将返回所需的值。
答案 1 :(得分:0)
import com.fasterxml.jackson.databind.ObjectMapper;
private static Form<Computer> editableForm(final Computer obj) {
ObjectMapper mapper = new ObjectMapper();
Form<Computer> form = Form.form(Computer.class);
Map<String,String> data = mapper.convertValue(obj, Map.class);
Map<String, String> submittedData = form.bindFromRequest().data();
data.putAll(submittedData);
return form.bind(data);
}
我的解决方案如下:
public T bind(T target, Map<String, String> newValues) {
DataBinder binder = new DataBinder(target);
binder.setAllowedFields(getAllowedFields());
binder.bind(new MutablePropertyValues(newValues));
return target;
}
================= EDIT
以下是关于安全问题的重要讨论:https://groups.google.com/forum/#!searchin/play-framework/Form $ 20bind / play-framework / uGrSlJMo48c / QnVjzP4ovqcJ
Form.bindFromRequest
没有参数。但是,正如大多数人所知,调用 没有参数的方法将绑定的所有字段 相应的模型对象,以类似命名的请求参数,包括 保持内部状态的字段,永远不能从外部设置 (例如boolean isAuthenticated)。也就是说,攻击者可以设置任何字段 如果他们只知道该名称,则规避安全 相应的模型对象字段。这当然是灾难性的 安全漏洞(类似于PHP的臭名昭着和弃用 register_globals选项: http://www.php.net/manual/en/security.globals.php)。