ajax之如何将参数传递给 Thymeleaf Ajax 片段

wayfarer 阅读:14 2024-09-03 21:39:00 评论:0

我有一个 Spring MVC Controller ,它返回一个 thymeleaf 片段的名称来查看解析器 bean。问题是这个片段需要一个 url 作为参数。我把片段放在这里:

     <!-- A fragment with wrapper form for basic personal information fragment --> 
 <th:block th:fragment="form-basic(url)"> 
    <form role="form" th:action="${url}" method="post" th:object="${user}"> 
         <th:block th:replace="admin/fragments/alerts::form-errors"></th:block> 
         <th:block th:include="this::basic" th:remove="tag"/> 
         <div class="margiv-top-10"> 
              <input type="submit"  class="btn green-haze" value="Save" th:value="#{admin.user.form.save}" /> 
              <input type="reset"  class="btn default" value="Reset" th:value="#{admin.user.form.reset}" /> 
        </div> 
  </form> 
</th:block> 

我无法在不出错的情况下传递该参数。 Controller 如下:

@RequestMapping(method = RequestMethod.GET) 
public String show(@CurrentUser User user, Model model) { 
   logger.info(user.toString()); 
   if(!model.containsAttribute(BINDING_RESULT_NAME)) { 
       model.addAttribute(ATTRIBUTE_NAME, user); 
   } 
   model.addAttribute("url", "/admin/users/self/profile"); 
   return "admin/fragments/user/personal::form-basic({url})"; 
} 

对于上面的示例,我收到以下错误:

06-Jan-2017 11:36:40.264 GRAVE [http-nio-8080-exec-9] org.apache.catalina.core.StandardWrapperValve.invoke El Servlet.service() para el servlet [dispatcher] en el contexto con ruta [/ejercicio3] lanzó la excepción [Request processing failed; nested exception is java.lang.IllegalArgumentException: Invalid template name specification: 'admin/fragments/user/personal::form-basic({url})'] con causa raíz 
 java.lang.IllegalArgumentException: Invalid template name specification: 'admin/fragments/user/personal::form-basic({url})' 
    at org.thymeleaf.spring4.view.ThymeleafView.renderFragment(ThymeleafView.java:275) 
    at org.thymeleaf.spring4.view.ThymeleafView.render(ThymeleafView.java:189) 
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1257) 
    at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1037) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:980) 

我已经完成了这些测试:

 "admin/fragments/user/personal::form-basic('{url}')"; 
"admin/fragments/user/personal::form-basic(@{/admin/users/self/profile})"; 
"admin/fragments/user/personal::form-basic(/admin/users/self/profile)"; 
"admin/fragments/user/personal::form-basic('/admin/users/self/profile')"; 

总之我得到错误

请您参考如下方法:

您有两种方法可以将参数从 Controller 传递到 Thymeleaf 片段。首先是通常的 Spring 方式 - 抛出模型:

@RequestMapping(method = RequestMethod.GET) 
public String show(@CurrentUser User user, Model model) { 
   model.addAttribute("url", "/admin/users/self/profile"); 
   return "admin/fragments/user/personal::form-basic"; 
} 

够了。在这种情况下,您不需要指定任何片段参数(即使您有它)。

第二种方法是在片段名称中指定参数:

@RequestMapping(method = RequestMethod.GET) 
public String show(@CurrentUser User user, Model model) { 
   String url = "/admin/users/self/profile"; 
   return String.format("admin/fragments/user/personal::form-basic(url='%s')",url); 
} 

注意,必须指定参数名称,并且字符串值必须放在单引号中。在这种情况下,您不需要将 url 变量添加到模型中。


标签:ajax
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号