1

我有两种看法:

  1. 显示有关实体的一些常见信息
  2. 显示有关此实体的更多详细信息

第二个视图有一个返回到第一个视图的链接。要创建链接,我需要一些信息,比如说两个 id(“id1”和“id2”)。这些 id 通过请求参数传递给第二个视图的控制器。

要在第二个视图中创建反向链接,我必须手动将请求参数转发给模型。这不是很方便。

有什么方法可以自动进行此转发吗?

这里有一个例子:

链接到第一个视图中的详细信息:

<portlet:renderURL var="detailsUrl">
    <portlet:param name="action" value="showDetails" />
    <portlet:param name="id1" value="${entity.id1}" />
    <portlet:param name="id2" value="${entity.id2}"/>
</portlet:renderURL>
<a href="${detailsUrl}">Details</a>

第二个控制器中的渲染方法:

@RenderMapping(params = "action=showDetails")
public String showDetails (
        @RequestParam("id1") int id1,
        @RequestParam("id2") int id2,
        Model model) {
    // The current unconvenient approach
    model.addAttribute("id1", id1);
    model.addAttribute("id2", id2);

    return "showDetails";
}

第二个视图中的返回链接:

<portlet:renderURL var="entityUrl">
    <portlet:param name="action" value="showEntity" />
    <portlet:param name="id1" value="${id1}" />
    <portlet:param name="id2" value="${id2}"/>
</portlet:renderURL>
<a href="${entityUrl}">Back</a>

我在互联网上搜索了几个小时,以找到我错过的技巧。但我发现的唯一一件事是:“春天会自动为你服用”。但我无法证实这一点。

谢谢你的帮助...

4

3 回答 3

2

好的,如果 @ModelAttribute 没有帮助,那么更复杂的方法如何:

创建一个实现org.springframework.web.portlet HandlerInterceptor的类。您需要覆盖一堆方法,但在其中一个postHandleRender中,将您的 id 设置为模型。

确保每个返回布尔值的实现方法都返回 true。否则,您的 portlet 方法可能不会被调用(例如,如果 preHandleRender 返回 false)。

当然,拦截器必须被引入到您的 portlet 中才能工作。这可以通过将以下内容添加到 portlet 的 context-config 来完成:

<bean class="org.springframework.web.portlet.mvc.annotation.DefaultAnnotationHandlerMapping">
    <property name="interceptors">
        <bean class="some.package.to.my.interceptors.MyInterceptor"/>
    </property>         
</bean>
于 2010-11-25T14:13:59.433 回答
0

尝试使用 @ModelAttribute 标记您的 id:

@RenderMapping(params = "action=showDetails")
public String showDetails (
        @ModelAttribute @RequestParam("id1") int id1,
        @ModelAttribute @RequestParam("id2") int id2,
        Model model) {
    // The current unconvenient approach
    //model.addAttribute("id1", id1);
    //model.addAttribute("id2", id2);

    return "showDetails";
}

请注意,我将 id 的显式设置注释掉到模型中。我没有对此进行测试,所以如果它有效,请在这里报告..

于 2010-11-25T13:31:12.633 回答
0

您可以简单地编写如下方法并添加生成地图。将其添加到模型地图。

private Map<String, String> getParamterMap(PortletRequest request){
        Map<String, String> parameters = new HashMap<String, String>();

        Set<String> keySet = request.getParameterMap().keySet();
        for(String key : keySet){
            parameters.put(key, request.getParameter(key));
        }

        return parameters;

    }

从您的 RenderMapping 方法中调用此方法以将您的所有请求参数添加到 ModelMap。

modelMap.addAllAttributes(getParamterMap(request));
于 2013-08-22T06:03:15.027 回答