gpt4 book ai didi

java - PlayFramework 中使用 Form 来封装 Controller 和 View 之间的问题

转载 作者:太空宇宙 更新时间:2023-11-04 06:12:11 24 4
gpt4 key购买 nike

我在使用 PlayFramework 2.3.8 表单时遇到问题。在 Controller 中我使用 play.data.Form,但 View 要求我 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()));

Controller

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 继续在 View 和 Controller 之间的表单包上设置错误。奇怪的是,它现在让我运行该项目。

Controller View

最佳答案

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

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

我的首选方法是仅更改 IntelliJ 查找源的顺序,以便它首先找到 Twirl 模板,然后如果失败,则退回到其 play.api.data 版本,这样我可以获得自动完成功能,但在 SBT 重新编译所有内容后错误也会消失。

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

rearranged sources folder

这当然是 super 笨拙的,特别是因为它似乎对大多数人来说都是开箱即用的!同样,请注意,由于其工作方式,对现有 View 模板的更改仍然需要重新编译才能反射(reflect)在编辑器中,因为 IntelliJ 更喜欢 SBT 编译的版本。

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

*就我而言,我已将两个 Play 2.3 项目作为公共(public)项目的模块导入,我怀疑这至少是问题的一部分 - 只是不清楚为什么会这样

关于java - PlayFramework 中使用 Form 来封装 Controller 和 View 之间的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28564940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com