当前位置: 首页 > 面试题库 >

方法形式(类)中的Form类已在Play中弃用!构架

司空坚
2023-03-14
问题内容

我花了很多时间试图解决这个问题,并寻找替代该方法的方法,但没有成功。

首先,播放!我有义务使用和注入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,并且不是,因为月食和其他任何原因是因为我从此工厂创建的表单中调用了它。

例:

// never works
formCreator.getFactory().form(Diretor.class).bindFromRequest();

// works fine, but is deprecated
Form.form(Diretor.class).bindFromRequest();

替代此不推荐使用的方法的最新方法是什么?

提前致谢。


问题答案:

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();
}


 类似资料:
  • 问题内容: 我正在使用react-navigation实现2个屏幕。但是导航到第二页时出现以下警告: 警告:isMounted(…)在纯Javascript类中已弃用。相反,请确保在componentWillUnmount中清除订阅和未决请求,以防止内存泄漏。 版本: 反应:16.3.1 反应本机:0.55.2 反应导航:1.5.11 效用:0.10.3 Login.js Home.js 我在这里

  • 组织。阿帕奇。Android 5.1中不推荐使用http类和AndroidHttpClient类。这些类不再被维护,您应该尽快将使用这些API的任何应用程序代码迁移到URLConnection类。 https://developer.android.com/about/versions/android-5.1.html#http 它建议切换到URLConnection类。没有足够的文档来准确记录如

  • 问题内容: 我只是迁移到Spring MVC 版本,但突然在Eclipse STS中将WebMvcConfigurerAdapter标记为已弃用 我该如何删除! 问题答案: 从Spring 5开始,你只需要实现接口 这是因为Java 8在接口上引入了覆盖该类功能的默认方法

  • 问题内容: 不推荐使用此调用: 在源文件中,我可以看到: 但是我不明白我必须使用哪种方法代替。 问题答案: 您可以在Hibernate 5.2 +中使用以下接口:

  • 我只是迁移到Spring mvc版本,但突然在eclipse STS WebMvcConfigrerAdapter中被标记为不建议使用 我怎么才能把它拿走!

  • 我刚开始编译iOS 11,注意到苹果现在宣布了这个属性 由于不赞成: https://developer.apple.com/documentation/uikit/uiviewcontroller/1621372-automaticallyadjustsscrollviewin iOS 11中是否有其他属性修复此警告? 默认值会保持为真吗?或者将来会如何处理?