如何使用Spring MVC将参数(标识对象的主键)从视图传递给控制器​​?

时间:2015-08-31 14:20:37

标签: java spring spring-mvc java-ee

我是Spring MVC中的新手,我对如何正确创建一个必须由定义到控制器类中的方法处理的视图页面的链接存在以下疑问。

所以我有以下情况:

在视图中我使用模型对象名称

<c:forEach items="${scuola.twp1007Progettos}" var="progetto" varStatus="itemProgetto">

    <!-- Visualizza il progetto solo se è un progetto PNSD: -->
    <c:if test="${progetto.flgTipPrg == 'P'}">
        <div class="group-item">
            <a href="visualizzaProspetto">
                <img src="<c:url value="resources/img/icons/projects/PNSD.png" />">
            </a>

            <div>
                <h4><a href="visualizzaProspetto">${progetto.codPro}</a></h4>
                <p>${progetto.twp1009Tipostaprogetto.desTipSta}</p>

            </div>
        </div>
    </c:if>

</c:forEach>

因此,正如您在前面的代码段中所看到的,我有一个 progetto 变量,它是名为 Twp1007Progetto 的模型类的实例。此模型类包含我在前面的代码段中正确使用的一些字段(例如 $ {progetto.codPro} )。

好的,直到现在我没有问题,我正确访问 progetto 变量的上一个属性。

在上一段代码中,我也有这个链接:

<a href="visualizzaProspetto">

其中 visualizzaProspetto 是由定义到控制器类中的此方法处理的资源:

@RequestMapping(value = "/visualizzaProspetto", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
    .....................................................
    .....................................................
    DO SOMETHING
    .....................................................
    .....................................................

    return "prospettoRendicontazione";
}

好的,这是正确调用的。

现在我的问题是,当用户点击 链接时,我无法处理简单的 visualizzaProspetto ,但我还要传递一个表示定义到 Twp1007Progetto 模型对象实例( $ {progetto.prgPro} 值)中的 prgPro 字段的值,因为它是主键上的主键数据库中单击的对象。

那么,做这件事的最佳方法是什么?我知道使用Spring我可以传递参数或路径变量,但我真的不知道如何正确处理这种情况。

TNX

1 个答案:

答案 0 :(得分:2)

使用请求参数:

<a href="visualizzaProspetto?codPro=${progetto.codPro}">
@RequestMapping(value = "/visualizzaProspetto", method = RequestMethod.GET)
public String home(@RequestParam String codPro, Locale locale, Model model) {
    ...
}

或使用路径变量:

<a href="visualizzaProspetto/${progetto.codPro}">
@RequestMapping(value = "/visualizzaProspetto/{codPro}", method = RequestMethod.GET)
public String home(@PathVariable String codPro, Locale locale, Model model) {
    ...
}

您可能需要URL encode codPro值,具体取决于它是否可以包含保留的字符。