Java 开始游戏框架-我在这里犯了什么愚蠢的错误?
因此,我开始在Mongo中使用play框架,但在尝试使用简单的MVC模式时遇到了一个问题。我看不到树木的树木与此,并知道解决办法一定是简单的 我将用户对象定义为实体:Java 开始游戏框架-我在这里犯了什么愚蠢的错误?,java,mongodb,playframework,Java,Mongodb,Playframework,因此,我开始在Mongo中使用play框架,但在尝试使用简单的MVC模式时遇到了一个问题。我看不到树木的树木与此,并知道解决办法一定是简单的 我将用户对象定义为实体: package models; import play.modules.mongo.MongoEntity; import play.modules.mongo.MongoModel; @MongoEntity("users") public class User extends MongoModel { publi
package models;
import play.modules.mongo.MongoEntity;
import play.modules.mongo.MongoModel;
@MongoEntity("users")
public class User extends MongoModel
{
public String username;
public String email;
public String password;
}
我有一个控制器,里面有以下两种方法:
package controllers;
import models.User;
import play.mvc.Controller;
import play.Logger;
public class UserController extends Controller
{
public static void createUser()
{
User user = new User();
render(user);
}
public static void insertUser(User iUser)
{
Logger.info("Paul 1: " + iUser + " :: " + (iUser == null));
}
}
路线定义如下:
POST /insertUser UserController.insertUser
GET /users UserController.createUser
因此,我定义了以下页面视图,当我单击“保存”时,控制器中的代码告诉我用户对象为空:
#{extends 'main.html' /}
#{set title:'Create User' /}
<form action="@{UserController.insertUser(user)}" method="POST"/>
Username: <input type="text" value="${user.username}" /><br/>
Password: <input type="text" value="${user.password}" /><br/>
Email: <input type="text" value="${user.email}" /><br/>
<input type="submit" value="Add User" />
</form>
#{扩展'main.html'/}
#{设置标题:'Create User'/}
用户名:
密码:
电子邮件:
我在acton上尝试了大量的排列,但不明白为什么它不起作用。有什么想法吗?非常感谢所有的帮助,我知道我缺少的是一些愚蠢的东西,正是这些。我想你至少缺少了HTML论坛输入元素上的名称属性,它们正在播放!将用于将窗体值映射到控制器参数。请尝试以下操作:
#{extends 'main.html' /}
#{set title:'Create User' /}
<form action="@{UserController.insertUser(user)}" method="POST"/>
Username: <input type="text" name="user.username" value="${user.username}" /><br/>
Password: <input type="text" name="user.password" value="${user.password}" /><br/>
Email: <input type="text" name="user.email" value="${user.email}" /><br/>
<input type="submit" value="Add User" />
</form>
#{扩展'main.html'/}
#{设置标题:'Create User'/}
用户名:
密码:
电子邮件:
或者,您可以使用来让模板系统为您生成表单。这对于用您自己的表单交叉检查{form}
标记的输出以查看不同之处也很有用
更新:您可能还必须删除表单操作属性{UserController.insertUser(user)}
中的user
参数,这将更像{UserController.insertUser}
解决方案是将用户类重命名为UserItem。我希望在Mongo或Play中有一个默认的用户类!那是个障碍
编辑:是的,包括名称映射在解决方案中也很有帮助,尽管它本身并不能解决这个问题。我将据此投票。遗憾的是,这些建议都不起作用。仍然输出null:-(我假设解决方案是您更改类名的组合,@pHk的建议,因为他建议在输入标记中使用name
属性,是Play将http表单项映射到对象的唯一方法。