我有两个观点:
第二个视图有一个回到第一个视图的链接。要创建链接,我需要一些信息,让我们说两个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>
我在互联网上搜索了一些我错过的技巧。但我发现的唯一一件事就是:“春天自动为你服用”。但我无法证实这一点。
感谢您的帮助......
答案 0 :(得分: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>
答案 1 :(得分: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对模型的显式设置。 我没有对此进行测试,所以请在此处报告是否有效。
答案 2 :(得分:0)
您可以简单地编写如下方法并添加生成Map。将其添加到模型图中。
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));