2013-09-26 53 views
0

在控制器I驗證表單輸入這樣的:Grails的重複的表單提交和字段的驗證

withForm { 
    def user = new User(params)  
    if(user.save()) { 
     render "success" 
    } else { 
     render view: "userForm", model: [user: user] 
    } 
}.invalidToken { 
    render view: "userForm" 
} 

在形式上我添加類錯誤輸入字段如果該字段上的一些錯誤:

<input value="${user?.name}" name="name" type="text" class="text${user?.errors?.getFieldError("name") ? ' error':''}" id="name"> 

問題: 在視圖中看不到Bean用戶。如果我使用Form包裝去除,它可以正常工作。

任何人都有一個想法可能會發生什麼?

謝謝。

回答

0

請問您的形式聲明包括useToken,例如

<g:form useToken="true" ...> 

documentationwithForm

的withForm方法需要在 形式使用useToken屬性的

UPDATE 您是否希望用戶bean在重複提交時返回?你只會在不成功保存時返回一個用戶。如果你想在重複提交嘗試用戶的回報,

}.invalidToken { 
    render view: "userForm", model: [user: user] 
} 
+0

是它不使用useToken標籤。 –

+0

你想要重複提交用戶bean返回?你只會在不成功保存時返回一個用戶。 – ikumen

+0

不,我希望它在驗證失敗時返回(在else子句中:render view:「userForm」,model:[user:user])。如果我忽略關閉窗體,它工作正常。 –

0

爲了使您的視圖來顯示驗證錯誤,您的控制器動作需要創建一個用戶實例,並驗證它。您當前的.invalidToken塊不會執行此操作。一個很好的方法可以輕鬆地做到這一點是有你的控制器動作自動從您的PARAMS創建User實例:

def myAction(User user) { 
    withForm { 
     if(user.save()) { 
      render "success" 
     } else { 
      render view: "userForm", model: [user: user] 
     } 
    }.invalidToken { 
     render view: "userForm", model: [user: user] 
    } 
} 
+0

感謝您自動創建用戶實例提示。但是,當令牌無效時,我不想顯示錯誤,只是當令牌有效但驗證失敗時。我認爲我的上層代碼可以用於此目的。 –