如何解决方法形式类中的Form类已在Play中弃用!构架
Play 2.5.x文档指出:
要包装一个类,您必须将play.data.FormFactory注入到Controller中,然后您可以创建表单:
表格userForm = formFactory.form(User.class);
因此,第一步是将注入FormFactory
到您的控制器中。您可以这样操作:
package controllers;
import play.*;
import play.mvc.*;
public class Application extends Controller {
@Inject FormFactory formFactory;
...
}
然后,在处理表单提交请求的操作中,您可以使用FormFactory
如下代码:
public Result handleFormSubmission() {
formFactory.form(Director.class).bindFromrequest();
}
解决方法
我花了很多时间试图解决这个问题,并寻找替代该方法的方法,但没有成功。
首先,播放!我有义务使用和注入FormFactory(在https://www.playframework.com/documentation/2.5.0/JavaForms中进行了说明)。
但是,仅为了实例化此FormFactory,我必须为其构造函数传递3个参数,即MessagesApi,Formatters和Validator。包括,我必须实例化Validator接口,但我不确定这是正确的方法。
为了使它更容易,我将其分为另一类:
package controllers;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import javax.validation.executable.ExecutableValidator;
import javax.validation.metadata.BeanDescriptor;
import play.data.FormFactory;
import play.data.format.Formatters;
import play.i18n.MessagesApi;
class Validador implements Validator {
@Override
public ExecutableValidator forExecutables() {
// TODO Auto-generated method stub
return null;
}
@Override
public BeanDescriptor getConstraintsForClass(Class<?> arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public <T> T unwrap(Class<T> arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public <T> Set<ConstraintViolation<T>> validate(T arg0,Class<?>... arg1) {
// TODO Auto-generated method stub
return null;
}
@Override
public <T> Set<ConstraintViolation<T>> validateProperty(T arg0,String arg1,Class<?>... arg2) {
// TODO Auto-generated method stub
return null;
}
@Override
public <T> Set<ConstraintViolation<T>> validateValue(Class<T> arg0,Object arg2,Class<?>... arg3) {
// TODO Auto-generated method stub
return null;
}
}
public class FormCreator {
MessagesApi msgAPI;
Formatters formatador;
Validador validador;
FormFactory factory;
public FormCreator() {
msgAPI = new MessagesApi(null);
formatador = new Formatters(msgAPI);
validador = new Validador();
factory = new FormFactory(msgAPI,formatador,validador);
}
// getters e setters
public MessagesApi getmsgAPI() {
return msgAPI;
}
public void setmsgAPI(MessagesApi msgAPI) {
this.msgAPI = msgAPI;
}
public Formatters getFormatador() {
return formatador;
}
public void setFormatador(Formatters formatador) {
this.formatador = formatador;
}
public Validador getValidador() {
return validador;
}
public void setValidador(Validador validador) {
this.validador = validador;
}
public FormFactory getFactory() {
return factory;
}
public void setFactory(FormFactory factory) {
this.factory = factory;
}
}
在我的控制器中,我必须输入以下内容:
@Inject
FormCreator formCreator = new FormCreator();
直到我花了几个小时发现这个问题,这个问题才得以解决。
另一个是,无论执行什么操作,方法bindFromRequest()始终返回null,并且不是,因为月食和其他任何原因是因为我从此工厂创建的表单中调用了它。
例:
// never works
formCreator.getFactory().form(Diretor.class).bindFromRequest();
// works fine,but is deprecated
Form.form(Diretor.class).bindFromRequest();
替代此不推荐使用的方法的最新方法是什么?
提前致谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。