如何将参数传递给Thymeleaf Ajax Fragment

我有一个Spring MVC控制器,该控制器返回百里香叶片段的名称以查看解析器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>

我无法在没有错误的情况下传递该参数。控制器如下:

@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')";

总之我得到了错误

回答:

您可以通过两种方式将参数从控制器传递到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在模型中添加变量。

以上是 如何将参数传递给Thymeleaf Ajax Fragment 的全部内容, 来源链接: utcz.com/qa/425683.html

回到顶部