Java 在PlayFramework中使用表单在控制器和视图之间打包问题
我在使用forms PlayFramework 2.3.8时遇到问题。在控制器中,我使用play.data.Form,但视图要求我使用play.api.data.Form。这导致IntelliJ IDEA 14.0.3抛出错误,无法运行应用程序 错误详细信息: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
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
选项