开始玩游戏框架 - 我在这里犯了什么愚蠢的错误?

时间:2011-11-28 12:08:57

标签: 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
{
    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的排列,并且无法弄清楚它为什么不起作用。有任何想法吗?非常感谢所有的帮助,我知道这是一些我不知道的愚蠢,这只是什么。

2 个答案:

答案 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类!这阻碍了我们。

编辑:是的,包括名称映射在解决方案中也有帮助,尽管它本身并没有解决问题。我会相应地投票。