Форма метода (Class <T>) из класса Form устарела в Play! Фреймворк
Я потратил много времени, пытаясь решить эту проблему, и безуспешно пытался найти способ ее заменить.
Сначала играй! обязывает меня использовать и вводить 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 () всегда возвращает ноль, и это не потому, что затмение, а все остальное, это потому, что я вызываю его из формы, созданной этой фабрикой.
Пример:
// never works
formCreator.getFactory().form(Diretor.class).bindFromRequest();
// works fine, but is deprecated
Form.form(Diretor.class).bindFromRequest();
Какой новый метод использовать вместо этого устаревшего метода?
Заранее спасибо.