2011-11-28 35 views
1

因此,我开始在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 

所以我有下面的页面视图定义,当我点击保存,控制中的代码呃告诉我,用户对象为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> 

我曾尝试一吨排列在阿克顿和想不通为什么它不工作。有任何想法吗?所有的帮助非常感谢,我知道这是一些愚蠢的,我错过了,这只是什么。

回答

0

我想你是至少错过了name关于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> 

或者,您可以使用template #{form} tag有模板系统为您生成的形式。这也可能有助于用您自己的表单来交叉检查#{form}标记的输出,以查看有什么不同。

更新:你可能还需要删除形式action属性@{UserController.insertUser(user)}user参数,然后会更喜欢@{UserController.insertUser}

+0

可悲的是,这些建议都没有奏效。仍然输出null :-( – pbattisson

0

解决方法是重命名User类以调用UserItem。我期望在Mongo或Play中有一个默认的用户类!那是阻碍。

编辑:是的,包括名称映射在内的解决方案也是有用的,尽管它本身并没有解决问题。我会相应地让它升级。

+0

我假设解决方案是您改变类名的组合,并且@pHk的建议,因为他建议在输入标记中使用'name'属性,这是Play的唯一方法将http表单项映射到对象。 – Codemwnci