所以我开始在Mongo中使用play框架,并且在使用简单的MVC模式尝试使用它时遇到了问题。我不能用树木看树木,知道解决方案一定很简单。
我将用户对象定义为实体:
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
所以我定义了以下页面视图,当我单击save时,控制器中的代码告诉我User对象为null:
#{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>
我已经尝试了很多关于acton的排列,并且无法弄清楚它为什么不起作用。有任何想法吗?非常感谢所有的帮助,我知道这是一些我不知道的愚蠢,这只是什么。
答案 0 :(得分:0)
我认为你至少错过了HTML论坛输入元素上的name
atrributes,Play!将用于将表单值映射到控制器参数。请尝试以下方法:
#{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>
或者,您可以使用template #{form}
tag让模板系统为您生成表单。这可能对使用您自己的表单交叉检查#{form}
标记的输出以查看不同内容非常有用。
更新:您可能还必须删除表单操作属性user
中的@{UserController.insertUser(user)}
参数,该参数更像@{UserController.insertUser}
。
答案 1 :(得分:0)
解决方案是将User类重命名为UserItem。我希望在Mongo或Play中有一个默认的User类!这阻碍了我们。
编辑:是的,包括名称映射在解决方案中也有帮助,尽管它本身并没有解决问题。我会相应地投票。