2010-01-13 42 views
1

这是由Grails生成的GSP代码,用于查看作为我模型的一部分的Person域对象的编辑操作,也恰好是ACEGI安全性插件的主要类。我已经剔除了一堆物业,以保持简短。该文件驻留在标准位置,grails-app/views/person/edit.gsp基本的Grails问题:以下Grails代码如何定义personInstance?

<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
     <meta name="layout" content="main" /> 
     <g:set var="entityName" value="${message(code: 'person.label', default: 'Person')}" /> 
     <title><g:message code="default.edit.label" args="[entityName]" /></title> 
    </head> 
    <body> 
     <div class="nav"> 
      <span class="menuButton"><a class="home" href="${createLink(uri: '/')}">Home</a></span> 
      <span class="menuButton"><g:link class="list" action="list"><g:message code="default.list.label" args="[entityName]" /></g:link></span> 
      <span class="menuButton"><g:link class="create" action="create"><g:message code="default.new.label" args="[entityName]" /></g:link></span> 
     </div> 
     <div class="body"> 
      <h1><g:message code="default.edit.label" args="[entityName]" /></h1> 
      <g:if test="${flash.message}"> 
      <div class="message">${flash.message}</div> 
      </g:if> 
      <g:hasErrors bean="${personInstance}"> 
      <div class="errors"> 
       <g:renderErrors bean="${personInstance}" as="list" /> 
      </div> 
      </g:hasErrors> 
      <g:form method="post" > 
       <g:hiddenField name="id" value="${personInstance?.id}" /> 
       <g:hiddenField name="version" value="${personInstance?.version}" /> 
       <div class="dialog"> 
        <table> 
         <tbody> 

          <tr class="prop"> 
           <td valign="top" class="name"> 
            <label for="username"><g:message code="person.username.label" default="Username" /></label> 
           </td> 
           <td valign="top" class="value ${hasErrors(bean: personInstance, field: 'username', 'errors')}"> 
            <g:textField name="username" value="${personInstance?.username}" /> 
           </td> 
          </tr> 
...SNIP... 
a bunch of props 
         </tbody> 
        </table> 
       </div> 
       <div class="buttons"> 
        <span class="button"><g:actionSubmit class="save" action="update" value="${message(code: 'default.button.update.label', default: 'Update')}" /></span> 
        <span class="button"><g:actionSubmit class="delete" action="delete" value="${message(code: 'default.button.delete.label', default: 'Delete')}" onclick="return confirm('${message(code: 'default.button.delete.confirm.message', default: 'Are you sure?')}');" /></span> 
       </div> 
      </g:form> 
     </div> 
    </body> 
</html> 

我的问题是,如何领域personInstance得到建立和填充?

我怀疑这是一个基本问题,它隐藏了我对Grails的工作原理缺乏理解,但我仍需要知道。

这源于创建我自己的复合页面的愿望,该复合页面访问对象及其相关数据,这是我的应用程序的核心。我期待着能够创建一个新的页面,我们称之为map.gsp,并以神奇的方式获取personInstance。尽管尝试了明显的方法,但我无法弄清楚如何做到这一点,我认为我的理解中心处有一个缺口。

回答

6

PersonInstance将被填充到控制器上。 当您提交表单时,关联的控制器将收到包含表单中存在的字段的地图。

所以,在你的控制,你会发现像

personInstance.properties = params 

其中params为包含字段映射submited的控制器,它的键是你定义的输入元素的名称命令你gsp文件。

+0

谢谢,这是我需要的小提示。有些东西刚刚落入我的位置。我有第二个问题,关于如何使用security.groovy中定义的默认forward URI将登录页面的参数传递给我的页面...但我会为此提出另一个问题。 – Simon