如何将参数传递到我从 gsp 获得的服务以及我在 Grails 的控制器中拥有的服务
How to pass params into Services that I get from the gsp and I have in my Controller in Grails
当我调用方法 save()
时,我得到了用户在我的控制器中的 g:textField
中输入的参数,我需要在我的服务中使用这个值。我怎样才能将控制器中的参数传递给我的服务,或者可以将这些数据从我的 gsp 直接传递到我的服务?
我试图传递等于 gsp-Controller 的参数当我试图访问我的服务中的参数时,我得到一个错误:No such 属性: params
普惠制:
<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))
}
将 params
作为参数传递给您的服务方法,因为它只能从控制器或标签库访问
更新:
代码示例
控制器
def yourService
def save(){
service.sendYourEmail emailTemplateInstance, params
}
服务:
def sendYourEmail( EmailTemplate emailTemplateInstance, params ){
def enterMail = params.enterEmail
....
}
您在控制器中使用的 params 属性是 Grails 在运行时为您添加的动态属性。您不能使用服务 class.
从服务中获取参数是个坏主意,但您可以使用以下行来做到这一点:
org.springframework.web.context.request.RequestContextHolder.currentRequestAttributes().params
一个好主意是使用一个命令:一个简单的 groovy/java 对象,您的参数从请求中绑定,然后将此命令发送到服务。这样做,您将删除服务 class(业务层)和参数映射(Web 层)之间的依赖关系:它将更容易测试和从其他部分重用(您可以根据需要创建命令)。
命令:
class MailCommand {
String enterEmail
}
控制器:
def mailService
def save(MailCommand mailCommand){
mailService.sendYourEmail(mailCommand, mailTemplate)
}
邮件服务class:
def sendYourEmail(MailCommand mailCommand, EmailTemplate emailTemplateInstance){
def enterMail = mailCommand.enterEmail
...
}
更多信息:http://grails.github.io/grails-doc/latest/guide/single.html#commandObjects
当我调用方法 save()
时,我得到了用户在我的控制器中的 g:textField
中输入的参数,我需要在我的服务中使用这个值。我怎样才能将控制器中的参数传递给我的服务,或者可以将这些数据从我的 gsp 直接传递到我的服务?
我试图传递等于 gsp-Controller 的参数当我试图访问我的服务中的参数时,我得到一个错误:No such 属性: params
普惠制:
<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))
}
将 params
作为参数传递给您的服务方法,因为它只能从控制器或标签库访问
更新:
代码示例
控制器
def yourService
def save(){
service.sendYourEmail emailTemplateInstance, params
}
服务:
def sendYourEmail( EmailTemplate emailTemplateInstance, params ){
def enterMail = params.enterEmail
....
}
您在控制器中使用的 params 属性是 Grails 在运行时为您添加的动态属性。您不能使用服务 class.
从服务中获取参数是个坏主意,但您可以使用以下行来做到这一点:
org.springframework.web.context.request.RequestContextHolder.currentRequestAttributes().params
一个好主意是使用一个命令:一个简单的 groovy/java 对象,您的参数从请求中绑定,然后将此命令发送到服务。这样做,您将删除服务 class(业务层)和参数映射(Web 层)之间的依赖关系:它将更容易测试和从其他部分重用(您可以根据需要创建命令)。
命令:
class MailCommand {
String enterEmail
}
控制器:
def mailService
def save(MailCommand mailCommand){
mailService.sendYourEmail(mailCommand, mailTemplate)
}
邮件服务class:
def sendYourEmail(MailCommand mailCommand, EmailTemplate emailTemplateInstance){
def enterMail = mailCommand.enterEmail
...
}
更多信息:http://grails.github.io/grails-doc/latest/guide/single.html#commandObjects