我试图将验证失败的结果从表单传递到新视图,其中将显示验证失败的字段。我的代码一直显示错误消息,而不是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)您正在使用重定向而不是转发或直接方法调用。超文本传输协议重定向只是一个3xx响应代码,带有带有新url的重定向
标头到浏览器。您的浏览器将检测响应代码,读取重定向标头,它将加载带有新超文本传输协议请求的新页面。更多信息:https://en.wikipedia.org/wiki/URL_redirection
因此,您在重定向中使用的参数映射将在如下url中转换:validateForm?id=无论什么
如果要在模型中使用对象(或其他对象),则在操作中不应使用重定向。
2)在您的
确认保存
操作中,您正在从数据库加载Ticket
实体,但此变量未在您的代码中使用(没什么大不了的)
3) 您正在重定向参数映射中发送一个“id”参数,但在validateForm操作中得到一个“ticketId”参数。
我的建议是在不重定向的情况下直接从
确认格式保存
呈现validateForm
gsp,类似于:
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吗?