如何将params传递给我从gsp获得的服务,我在Grails中的Controller中

时间:2015-05-31 15:09:37

标签: grails service gsp

当我调用方法g:textField时,我已经获得了用户在我的控制器的save()中输入的参数,我需要在我的服务中使用此值。如何将我在控制器中的参数传递给我的服务,或者可以将这些数据从我的gsp直接传递给我的服务?

我试图传递与gsp-Controller相同的参数当我试图访问我的服务中的参数时,但是我收到一个错误:没有这样的属性:params

GSP:

<g:textField name="enterEmail" required=""/>

控制器:

save(){
    def enterMail = params.enterEmail   
}

服务:

def sendYourEmail(EmailTemplate emailTemplateInstance){     
    ....            
    def enterMail = params.enterEmail   
    log.info "Sending email"
    String source = 'myEmail'
    Destination destination = new Destination([enterMail])
    Content subject = new Content('test')
    Body body = new Body().withHtml(new Content(output.toString()))
    Message message = new Message(subject, body)
    amazonWebService.ses.sendEmail(new SendEmailRequest(source, destination, message))  
}

2 个答案:

答案 0 :(得分:1)

您在控制器中使用的params属性是Grails在运行时为您添加的动态属性。您不能在服务类中使用。

从服务中获取params是一个坏主意,但你可以使用这一行来做到这一点:

Case

一个好主意是使用一个命令:一个普通的groovy / java对象,其参数与请求绑定,并将此命令发送给服务。这样做,您可以消除服务类(业务层)和参数映射(Web层)之间的依赖关系:从其他部分进行测试和重用将更容易(您可以随意创建命令)。

命令:

org.springframework.web.context.request.RequestContextHolder.currentRequestAttributes().params

控制器:

class MailCommand {
    String enterEmail
}

MailService类:

def mailService
def save(MailCommand mailCommand){
    mailService.sendYourEmail(mailCommand, mailTemplate)
}

更多信息:http://grails.github.io/grails-doc/latest/guide/single.html#commandObjects

答案 1 :(得分:0)

params作为参数传递给您的服务方法,因为它只能从控制器或标记库中访问

更新:

代码示例

控制器

def yourService
def save(){
  service.sendYourEmail emailTemplateInstance, params
}

服务:

def sendYourEmail( EmailTemplate emailTemplateInstance, params ){
   def enterMail = params.enterEmail
   ....
}