spring mvc mapping - 在控制器之间发送值

时间:2013-08-22 17:30:29

标签: spring spring-mvc spring-3 thymeleaf

我在春天有3个mvc的webapp。情况是我有带url的索引页面,当用户点击它们时,应该显示另一个页面,其中包含所选信息的详细信息。现在显示详细信息页面,但没有任何信息(在索引页面上创建的模型具有正确的变量但在详细控制器中没有 - 在调试模式下)。 索引控制器方法:

@RequestMapping(value="/{site}", method = RequestMethod.GET)
public String showDetails(@RequestParam(value = "site", required = true) String  site, Model model){
    Catalog product = catalogEndpoint.getByTitle(site);
    model.addAttribute("product", product);
    return "details";
    }

index html:

<form action="#" th:object="${product}" method="post" th:action="@{/details}">
    <table border="0" width="600"  th:each="sb, poz : ${product}" >
<tr >
<td rowspan="3" width="20"><span th:text="${poz.count}"></span></td> 
<td>
<a  th:href="@{/details/(site=${sb.tytul})}" th:value="${site}"><span  th:text="${sb.tytul}"></span></a>
    </td>
    </tr>
    <tr >
<td><span th:text="${sb.adres}"></span></td>
</tr>
<tr>
<td>category:<b><span th:text="${sb.category.name}"></span></b></td>
    </tr>
   </table>
    </form>

详细说明控制器方法:

@RequestMapping(value = "details/{site}", method = RequestMethod.GET)
public String showHomePage(@PathVariable(value = "site") String site, Model model){
    model.addAttribute("product");
    return "details";
}

详细信息html:

<form th:object="${product}" method="get" th:action="@{/details}">
    <table border="1" width="600"   >
<tr >
<td ><span th:text="${tytul}"></span></td> 
<td>
<span th:text="${opis}"></span>
    </td>
<td><span th:text="${adres}"></span></td>
</tr>
</table>
</form>

我没有任何想法如何映射详细信息网站(我尝试了很多解决方案,但没有)。谢谢你的帮助。

3 个答案:

答案 0 :(得分:1)

使用{38}使用th:object,需要使用*{}

引用该对象的字段
<form th:object="${product}" method="get" th:action="@{/details}">
    <table border="1" width="600"   >
<tr >
<td ><span th:text="*{tytul}"></span></td> 
<td>
<span th:text="*{opis}"></span>
    </td>
<td><span th:text="*{adres}"></span></td>
</tr>
</table>
</form>

假设tytulopisadresproduct的字段。除非它是一种类型,否则不要忘记

Catalog product = catalogEndpoint.getByTitle(site);
model.addAttribute("product", product);

在您的details控制器方法中,否则您将没有Catalog模型属性。

答案 1 :(得分:0)

在详细信息控制器中,您在模型中设置产品对象在哪里?

 model.addAttribute("product"); 

只是settingstring对象“product”,获取产品对象并将其设置在详细控制器中,就像你在showDetails方法中所做的那样

答案 2 :(得分:0)

更改

model.addAttribute("product");

Catalog product = catalogEndpoint.getByTitle(site);
model.addAttribute("product", product);

在“showPage”方法中。