Java 在PlayFramework中使用表单在控制器和视图之间打包问题

Java 在PlayFramework中使用表单在控制器和视图之间打包问题,java,intellij-idea,playframework-2.0,Java,Intellij Idea,Playframework 2.0,我在使用forms PlayFramework 2.3.8时遇到问题。在控制器中,我使用play.data.Form,但视图要求我使用play.api.data.Form。这导致IntelliJ IDEA 14.0.3抛出错误,无法运行应用程序 错误详细信息: Error:Play 2 Compiler: Note: Some input files use unchecked or unsafe operations. Note: Recompile with -Xlint:unchecke

我在使用forms PlayFramework 2.3.8时遇到问题。在控制器中,我使用play.data.Form,但视图要求我使用play.api.data.Form。这导致IntelliJ IDEA 14.0.3抛出错误,无法运行应用程序

错误详细信息:

Error:Play 2 Compiler: 
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output

Error:(59, 50) Play 2 Compiler: 
C:\Users\Jonathan\Documents\WorkspaceIdea\quicket\app\controllers\UsuarioController.java:59: error: incompatible types: Form<Usuario> cannot be converted to List<Usuario>
     return ok(views.html.usuariosHome.render(formularioForm, Comuna.all()));
错误:播放2编译器:
注意:某些输入文件使用未经检查或不安全的操作。
注意:使用-Xlint重新编译:未选中以获取详细信息。
注:部分信息已被简化;使用-Xdiags:verbose重新编译以获得完整输出
错误:(59,50)播放2编译器:
C:\Users\Jonathan\Documents\WorkspaceIdea\quicket\app\controllers\UsuarioController.java:59:错误:不兼容的类型:表单无法转换为列表
返回ok(views.html.usuariosHome.render(formularoform,Comuna.all());
控制器

package controllers;

import controllers.seguridad.Autorizacion;
import controllers.seguridad.AutorizacionLogica;
import controllers.seguridad.Rol;
import models.Comuna;
import models.Usuario;
import play.data.DynamicForm;
import play.data.Form;
import play.filters.csrf.RequireCSRFCheck;
import play.mvc.Controller;
import play.mvc.Result;
import views.html.*;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class UsuarioController extends Controller {

    public static Form<Usuario> formularioForm = Form.form(Usuario.class);

    public static Result indexTest() {

        return ok(views.html.usuarios.render(formularioForm, Comuna.all()));
    }
}
包控制器;
导入controllers.seguridad.Autorizacion;
导入controllers.seguridad.AutorizacionLogica;
导入controllers.seguridad.Rol;
进口模型;
进口模型;
导入play.data.DynamicForm;
导入play.data.Form;
导入play.filters.csrf.RequireCSRFCheck;
导入play.mvc.Controller;
导入play.mvc.Result;
导入视图;
导入java.util.ArrayList;
导入java.util.Date;
导入java.util.List;
公共类控制器扩展控制器{
公共静态表单formularoform=Form.Form(Usuario.class);
公共静态结果indexTest(){
返回ok(views.html.usuarios.render(formularoform,Comuna.all());
}
}
查看

@(userForm: Form[Usuario], lstComuna: List[Comuna])
@import helper._
@import java.util._
@main("Usuarios") {

    <div class="container">
        <h1>Usuario</h1>
        @form(routes.UsuarioController.agregarUsuario(),'class -> "form-horizontal") {


            @defining(userForm("id")) { uidField => <input type="hidden" name="@uidField.name" id="@uidField.id" value="@uidField.value"> }
            <div class="panel panel-default">
                <div class="panel-heading">Agregar Usuarios</div>
                <div class="panel-body">
                    <div class="form-group">
                        <label for="rut" class="col-sm-2 control-label">Rut</label>
                        <div class="col-sm-4">
                        @inputText(userForm("rut"), 'id -> "rut", 'name -> "rut",'_showConstraints -> false, 'class ->"form-control")
                        </div>
                        <div class="col-sm-1">
                        @inputText(userForm("dv"), 'id -> "dv", 'name -> "dv",'_showConstraints -> false, 'class ->"form-control")
                        </div>
                    </div>
                    ....
        }
}
@(userForm:Form[Usuario],lstComuna:List[Comuna])
@导入助手_
@导入java.util_
@主要(“通常”){
乌萨里奥
@表单(routes.UsuarioController.agregarUsuario(),'class->“表单水平”){
@正在定义(userForm(“id”){uidField=>}
高利贷者
车辙
@inputText(userForm(“rut”),'id->“rut”,'name->“rut”,“\u showConstraints->false,'class->“表单控件”)
@inputText(userForm(“dv”),“id->”dv“,“name->”dv“,“\u showConstraints->false,”,class->“表单控件”)
....
}
}
提前谢谢

更新

多亏了singhakash,我解决了代码中的一个bug。但是无论如何,IDE继续在视图和控制器之间的表单包上设置错误。奇怪的是,它让我现在可以运行这个项目了

从IntelliJ 14.1.6(Scala插件1.5.4)开始,我仍在试图找到解决这个问题的正确方法,但通过重新配置模块源代码,我可以让事情变得不那么烦人

最直接的方法是将视图源目录标记为已排除(右键单击->将目录标记为->已排除),但这有一个缺点,即在触发SBT编译之前,不会在自动完成中显示任何新视图,因为定义不可用

我的首选方法是改变IntelliJ查找源代码的顺序,这样它就可以先找到Twirl模板,如果找不到,就使用它的
play.api.data
版本,这样我就可以自动完成,但也可以在SBT重新编译所有内容后让错误消失

为此,打开模块设置,选择模块,然后选择“源”选项卡,并从源中删除
app
文件夹,然后通过选择app文件夹并单击“源”按钮来读取(在UI中没有更直接的方法对其重新排序):

当然,这是一个超级麻烦的问题,尤其是因为它似乎对大多数人来说都是开箱即用的!同样,请注意,由于其工作方式,对现有视图模板的更改仍然需要重新编译才能反映在编辑器中,因为IntelliJ更喜欢SBT编译版本

我将继续研究这一点,看看我是否能够找出我的配置*(可能还有你的配置)中导致事情无法按预期工作的特殊之处,因为解决这一问题将是正确的解决方案


*在我的例子中,我已经将两个Play 2.3项目作为一个普通项目的模块导入,我怀疑这至少是问题的一部分,只是不清楚为什么会这样

你确定你调用了上面的视图,因为日志上说
表单不能转换为List
而不是任何api包错误是的,我在视图中有一个错误,但我解决了它。不管怎样,IDE一直在表单包上向我抛出一个错误。我更新了帖子。请尝试
invalidatecache/Restart
选项