当前位置: 首页 > 知识库问答 >
问题:

Grails检索g中的控制器参数:每个

韶和璧
2023-03-14

我试图将验证失败的结果从表单传递到新视图,其中将显示验证失败的字段。我的代码一直显示错误消息,而不是validationResult,它确实出现在url参数中。

检查验证的方法如下:

def confirmFormToSave() {
    def ticket = Ticket.get(params.ticketId)
    def ticketId = params.ticketId as long
    ValidationResult validationResult = ticketService.validateCurrentTicketForms("", ticketId)
    if (!ticketValidationResult.isPassed()) {
      log.error "Validation failure, cannot change Ticket status"
      redirect(action: 'validateForm', params: [id: params.ticketId, validationResult: validationResult])
      return
    } else {
      params.isGroup = false
      redirect(action: 'submitForm', params: params)
    }
  }

这将在验证失败时重定向到以下呈现gsp的方法:

def validateForm() {
    def ticket = Ticket.get(params.ticketId)
    def ticketId = params.ticketId as long
    ValidationResult validationResult = ticketService.validateCurrentTicketForms("", ticketId)
    def message = 'Sorry, we could not change the ticket state, validation has failed, please fill out all required fields.'
      [ticket: ticket, message: message, validationResult: validationResult]
  }

我把这个拉回普惠制如下:

<g:each in="${validationResult}" var="resultError">
   <li>${resultError}</li>
</g:each>

我不确定我是否正确地在两个方法之间传递了参数,因为目前我基本上检查了两次相同的结果,以便在validateForm.gsp中呈现它,这似乎不对。

共有1个答案

劳麒
2023-03-14

我在您的代码中看到一些奇怪的东西:

1)您正在使用重定向而不是转发或直接方法调用。超文本传输协议重定向只是一个3xx响应代码,带有带有新url的重定向标头到浏览器。您的浏览器将检测响应代码,读取重定向标头,它将加载带有新超文本传输协议请求的新页面。更多信息:https://en.wikipedia.org/wiki/URL_redirection

因此,您在重定向中使用的参数映射将在如下url中转换:validateForm?id=无论什么

如果要在模型中使用对象(或其他对象),则在操作中不应使用重定向。

2)在您的确认保存操作中,您正在从数据库加载Ticket实体,但此变量未在您的代码中使用(没什么大不了的)

3) 您正在重定向参数映射中发送一个“id”参数,但在validateForm操作中得到一个“ticketId”参数。

我的建议是在不重定向的情况下直接从确认格式保存呈现validateFormgsp,类似于:

def confirmFormToSave(Long tickectId) {    
    ValidationResult validationResult = ticketService.validateCurrentTicketForms("", ticketId)
    if (!ticketValidationResult.isPassed()) {
      log.error "Validation failure, cannot change Ticket status"
      String message = 'Sorry, we could not change the ticket state, validation has failed, please fill out all required fields.'
      Ticket ticket = Ticket.get(ticketId)
      return render(view: "validateForm", model: [ticket: ticket, message: message, validationResult: validationResult])
    } else {
      params.isGroup = false
      redirect(action: 'submitForm', params: params)
    }
  }

 类似资料:
  • 我正在开发一个使用Spring Boot的项目。我有一个接受GET请求的控制器。 目前,我正在接受对以下类型URL的请求:

  • 我有过 我通过这种方式传递profileJson: 但是我的配置文件Json对象具有所有空字段。我应该怎么做才能让Spring解析我的json?

  • 我有两个控制器。两者都是映射后endpoint。 在第一个控制器(Controlller1)使所有我需要的对象,我想调用/重定向第二个控制器,以便继续,然后从它得到响应。 我尝试过使用RestTemplate,但总是会出现405错误。我在某个地方读到,这是因为多部分 问题是,如何调用第二个endpoint?

  • 我需要在Spring MVC控制器中检索来自视图中th:value字段的内容。使用RequestParam尝试了下面的代码,但没有成功。 表格代码: SpringMVC控制器 注意:我知道这也可以通过将th:value替换为th:field、在表单标记中添加th:object并在控制器中使用@ModelAttribute来实现。但这需要创建一个完整的对象,并将形状与对象紧密连接。我不想那样做。只需

  • 问题内容: 我有 我以这种方式传递profileJson: 但是我的profileJson对象具有所有空字段。我应该怎么做才能使spring解析我的json? 问题答案: 这可以通过自定义编辑器完成,该编辑器将JSON转换为UserProfile对象: 这是为了在控制器类中注册编辑器: 这是使用编辑器解组JSONP参数的方法:

  • 其中map包含值。 在服务器端,我无法检索此映射。我尝试了@RequestParam Object obj,但没有成功。我不知道怎么才能把这些值拿到那里? 我需要将它转换成POST吗?