2017-05-09 114 views
1

动态URL相同的模板,我有两个HTML模板,做同样的功能,但由两个不同的控制器来处理:Thymeleaf:使用来自不同控制器

1 HTML由主持人控制器处理

<form th:action="@{/moderator/new-user-form}" th:object="${caltest}" method="post" 
    enctype="multipart/form-data" class="form-validate form row"> 
<!--some code--> 
</form> 

第二由管理控制器处理的html。

<form th:action="@{/admin/new-user-form}" th:object="${caltest}" method="post" 
    enctype="multipart/form-data" class="form-validate form row"> 
<!--some code--> 
</form> 

正如你可以看到这些模板只能通过行动网址不同:

日:行动= “@ {/ someurl}”

是否有可能使用相同的来自不同控制器的动态网址模板?

+0

我在问这个问题,以避免重复相同的代码多次 – user7244716

+0

从哪里得到的标识符调用正确的控制器?在你的情况'管理员或'调解人?或者至少完整的网址? – Patrick

+0

你试过吗?你有没有得到任何错误?只要将不同的控制器映射到不同的URL路径,就可以从不同的控制器返回相同的模板 – SAP

回答

1

有很多不同的方法可以做到这一点......最简单的方法是在控制器中使用相同的模板,并在每个控制器中传递一个包含正确操作的变量。

例如:

// Moderator controller 
@RequestMapping(value = "/moderator") 
public String moderator(Map<String, Object> model) { 
    model.put("action", "/moderator/new-user-form"); 
    return "new-user-form"; 
} 

// Admin controller 
@RequestMapping(value = "/moderator") 
public String moderator(Map<String, Object> model) { 
    model.put("action", "/admin/new-user-form"); 
    return "new-user-form"; 
} 

而在HTML

<form th:action="@{${action}}"> 

如果不适合,你可以把窗体本身变成一个片段,然后通过操作作为参数。这样的事情:

<!-- Fragment --> 
<form th:fragment="userform (action)" th:action="@{${action}}"> 
    . 
    . 
    . 
</form> 

<!-- Including the fragment --> 
<div th:replace="fragments/userform :: userform(action='/admin/new-user-form')" /> 
<!-- or --> 
<div th:replace="fragments/userform :: userform(action='/moderator/new-user-form')" /> 
+0

这完美的工作! '

'非常感谢! – user7244716

相关问题