当我调用方法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))
}
答案 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
....
}