我花了很多时间尝试解决这个问题,并搜索方法来替换这个,但没有成功.
但是为了实例化这个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 unwrap(Class arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public Set> validate(T arg0, Class>... arg1) {
// TODO Auto-generated method stub
return null;
}
@Override
public Set> validateProperty(T arg0, String arg1, Class>... arg2) {
// TODO Auto-generated method stub
return null;
}
@Override
public Set> validateValue(Class arg0, String arg1, 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,并且不是因为eclipse和其他任何东西,因为我是从这个工厂创建的表单中调用它.
例:
// never works
formCreator.getFactory().form(Diretor.class).bindFromRequest();
// works fine, but is deprecated
Form.form(Diretor.class).bindFromRequest();
使用这种弃用方法的最新方法是什么?
提前致谢.