【发布时间】:2016-07-06 02:52:41
【问题描述】:
我花了很多时间试图解决这个问题,并寻找替代这个的方法,但没有成功。
首先,玩!我有义务使用和注入 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, 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,并且是no,因为eclipse,以及其他任何东西,这是因为我从这个工厂创建的表单中调用它。
例子:
// never works
formCreator.getFactory().form(Diretor.class).bindFromRequest();
// works fine, but is deprecated
Form.form(Diretor.class).bindFromRequest();
用什么最新的方法来代替这个不推荐使用的方法?
提前致谢。
【问题讨论】:
标签: java forms playframework deprecated