2014-01-23 43 views
1

我會在前言中說我的背景是Graphic Design(一直在做JavaScript幾年).Ok,我一直在尋找和尋找一個簡單的教程,關於如何創建一個基本的表單一個控制器,它發送電子郵件正文中的表單信息。一個簡單的Grails窗體。我不知所措

這是我在我的GSP:

<g:form name="batchform" url="[action:'forminfo', controller:'onboardingform'] /> 
<label>Application Group or Area</label> 
<g:textField name="apparea01" type="text" placeholder="Place Holder Text Field 1" value='${params.apparea01}' /> 
<label>Department Name</label> 
<g:textField name="deptname02" type="text" placeholder="Place Holder Text Field 2" value='${params.deptname02}' /> 

<input type="submit" value="Submit Form" id="FormButton" > 
<g:form> 

而且控制器是我感到困惑:

package .com 
import util.Environment 
import MailTools 
import MetricsLogger 

class OnboardingformController { 
     String apparea01, 
    String deptname02 

     static constraints = { 
     apparea01 blank: false, nullable: false 
     deptname02 blank: false, nullable: false 
       } 

     def index() { 
     render (view:'onboardingform.gsp') 

      } 

     sendMail { 
     to '[email protected]' 
     cc params.mail 
     subject 'I am the form test in the subjectline' 
     body 'i am the body of the form. I should have vars here that display the user input from form fields' 

     } 

} 

我現在還沒有一個域中設置,因爲沒有DB附加到這個網站。我只需要將這些字段輸入推送到電子郵件正文中。我意識到這可能是一個非常基本的操作,逃避我(我的背景是美術,而不是計算機科學)。

MailTools已配置爲默認郵箱。表格需要發送到另一個電子郵件地址。 MetricsLogger捕獲登陸頁面上的用戶信息。

在此先感謝。這方面的知識會在我的追求打開我的眼睛是一個藝術家/程序員:)

+1

看來你是混合控制器,服務和域的概念。它應該是3個不同的課程。另外,不要以爲你現在真的需要'package .com'(並且它不能以點開頭),只需將你的控制器放入'controllers'目錄(對於'domain'和'service'同樣) –

回答

0

好吧,我在

grails-app/controllers/test/OnboardingformController.groovy想出了這個控制器:

package test 

class OnboardingformController { 

    def index() { 
     render(view: 'onboardingForm.gsp') 
    } 

    def formSubmission(String apparea01, String deptname02, String email) { 
     println "Send Mail from $email to [email protected] with apparea01=$apparea01 and deptname02=$deptname02" 
     /* 
     // Commented out for now so I don't have to set up mail ;-) 
     sendMail { 
      to '[email protected]' 
      cc params.mail 
      subject 'I am the form test in the subjectline' 
      body 'i am the body of the form. I should have vars here that display the user input from form fields' 
     } 
     */ 
     redirect(action:'index') 
    } 
} 

這GSP grails-app/onboardingform/onboardingform.gsp

<!DOCTYPE html> 
<html> 
    <head> 
     <meta name="layout" content="main"/> 
     <title>Onboarding</title> 
    </head> 
    <body> 
     <g:form action="formSubmission"> 
      <p> 
       <label>Application Group or Area</label> 
       <g:textField name="apparea01" type="text" placeholder="Place Holder Text Field 1" value='${params.apparea01}' /> 
      </p> 
      <p> 
       <label>Department Name</label> 
       <g:textField name="deptname02" type="text" placeholder="Place Holder Text Field 2" value='${params.deptname02}' /> 
      </p> 
      <p> 
       <label>Email</label> 
       <g:textField name="email" type="text" placeholder="Place Holder Text Field 3" value='${params.email}' /> 
      </p> 
      <p> 
       <input type="submit" value="Submit Form" id="FormButton" > 
      </p> 
     </g:form> 
    </body> 
</html> 

當填寫表單時,應打印出您輸入的值(到控制檯)並重定向到表單。讓我知道是否有任何意義:-)

如果您需要驗證(沒有域對象),您可以使用命令對象。這改變控制器:

package test 

class OnboardingformController { 

    def index() { 
     render(view: 'onboardingForm.gsp') 
    } 

    def formSubmission(SubmissionCommandObject cmd) { 
     if(!cmd.validate()) { 
      render(view: 'onboardingForm.gsp', model:[ data: cmd ]) 
      return 
     } 
     else { 
      println "Send Mail from $cmd.email to [email protected] with apparea01=$cmd.apparea01 and deptname02=$cmd.deptname02" 
     } 
     redirect(action:'index') 
    } 

} 

class SubmissionCommandObject { 
    String apparea01 
    String deptname02 
    String email 

    static constraints = { 
     apparea01 blank: false, nullable: false 
     deptname02 blank: false, nullable: false 
     email blank: false, email: true 
    } 
} 

和視圖來:

<!DOCTYPE html> 
<html> 
    <head> 
     <meta name="layout" content="main"/> 
     <title>Onboarding</title> 
    </head> 
    <body> 
     <g:hasErrors bean="${data}"> 
      <g:renderErrors bean="${data}" as="list" /> 
     </g:hasErrors> 
     <g:form action="formSubmission"> 
      <fieldset> 
       <p class="prop ${hasErrors(bean:data, field:'apparea01', 'errors')}"> 
        <label>Application Group or Area</label> 
        <g:textField name="apparea01" type="text" placeholder="Place Holder Text Field 1" value='${data?.apparea01}' /> 
       </p> 
       <p class="prop ${hasErrors(bean:data, field:'deptname02', 'errors')}"> 
        <label>Department Name</label> 
        <g:textField name="deptname02" type="text" placeholder="Place Holder Text Field 2" value='${data?.deptname02}' /> 
       </p> 
       <p class="prop ${hasErrors(bean:data, field:'email', 'errors')}"> 
        <label>Email</label> 
        <g:textField name="email" type="text" placeholder="Place Holder Text Field 3" value='${data?.email}' /> 
       </p> 
       <p> 
        <input type="submit" value="Submit Form" id="FormButton" > 
       </p> 
      </fieldset> 
     </g:form> 
    </body> 
</html> 

很明顯,這可能是更漂亮,但也足以令這個簡單的例子

+0

謝謝許多。我會試試這個。你搖滾! – Mike

+0

@Mike是否像你期望的那樣工作? –

+0

Tim,是的,我可以通過表單將參數寫入控制檯,因此表單正在工作。感謝您的詢問。現在,我正在通過電子郵件發送表單。所以,我走了一半! – Mike

相關問題