2011-11-28 44 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