使用表单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()));
控制器
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()));
}
}
查看
@(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>
....
}
}
提前致谢。
更新
感谢singhakash,我解决了代码中的错误。但无论如何,IDE继续在视图和控制器之间的Form包上设置错误。奇怪的是,它让我现在可以运行该项目。
答案 0 :(得分:1)
从IntelliJ 14.1.6(Scala插件1.5.4)开始,我仍然试图找到解决这个问题的正确方法,但是通过重新配置模块源,我能够减少烦恼。
最直接的方法是将视图源目录标记为已排除(右键单击 - &gt;“将目录标记为” - &gt;已排除),但这样做的缺点是在触发之前不会在自动完成中显示任何新视图SBT编译,因为定义不可用。
我首选的方法是只更改IntelliJ查找源的顺序,以便它首先找到Twirl模板,然后失败,退回到play.api.data
版本,这样我就可以获得自动完成但是在SBT重新编译所有内容之后,错误也会消失。
要执行此操作,请打开“模块设置”,选择模块,然后选择“源”选项卡,并从源中删除app
文件夹,然后通过选择应用程序文件夹并单击“源”按钮进行读取(没有更直接的方法在UI中对它们进行重新排序):
这当然是超级克鲁迪,特别是因为它似乎对大多数人来说都是开箱即用的!同样,请注意,由于其工作方式,现有视图模板的更改仍需要重新编译才能反映在编辑器中,因为IntelliJ更喜欢SBT编译版本。
我将继续研究这个问题,看看我能否弄清楚我的配置*(以及可能是你的)导致事情无法按预期工作的特殊情况,因为解决这个问题将是正确的解决方案。
*在我的情况下,我已将两个Play 2.3项目导入为一个共同项目的模块,我怀疑这至少是问题的一部分 - 我不清楚为什么会这样