精通 Grails: 文件上传和 Atom 联合
2009-10-26 00:00:00 来源:WEB开发网注意 <g:select> 元素。字段名为 author.id。在 “GORM - 有趣的名称,严肃的技术” 中可以了解到,列表中显示的文本来自 User.toString() 方法。该文本通常也是表单提交时作为字段值发回到服务器的值。在这里,optionKey 属性覆盖字段值,从而发回 Author 的 id。
为 EntryController.groovy 提供 author.id 字段的最快方式是将一个隐藏字段添加到表单中,如清单 3 所示。由于执行 create 动作前必须登录,而登录的 User 是博客条目的 author,因此对于这个值可以安全地使用 session.user.id。
清单 3. 从表单传递 author.id 字段
<g:form action="save" method="post" >
<input type="hidden" name="author.id" value="${session.user.id}" />
<!-- SNIP -->
</g:form>
对于像 Blogito 这样的简单的应用程序,这样也许就足够了。但是,这样做留下了一个漏洞,使客户端的黑客有机会为 author.id 注入不同的值。为确保彻底的安全,可以在 save 闭包中添加 Entry.author,如清单 4 所示:
清单 4. 将 author.id 保存在服务器上
def save = {
def entryInstance = new Entry(params)
entryInstance.author = User.get(session.user.id)
if(!entryInstance.hasErrors() && entryInstance.save()) {
flash.message = "Entry ${entryInstance.id} created"
redirect(action:show,id:entryInstance.id)
}
else {
render(view:'create',model:[entryInstance:entryInstance])
}
}
更多精彩
赞助商链接