Spring MVC Portlets:带有displaytag的外部分页需要进入动作阶段

时间:2013-01-15 17:35:53

标签: spring pagination portlet displaytag

我正在使用Spring MVC portlet,我需要实现一个带外部分页的显示标记。为此,我在JSP中定义了我的表:

    <portlet:actionURL var="viewListURL">
        <portlet:param name='action' value='${ServletContextKeys.MY_ACTION_METHOD}'/> 
    </portlet:actionURL>  
                <display:table name="${whateverList}"
                               requestURI="${viewListURL}"
                               class="displayTagTable"
                               export="true"
                               uid="item"
                               pagesize="10"
                               partialList="true"
                               sort="external"
                               defaultsort="1"                                  
                               size="${ServletContextKeys.SC_LIST_SIZE}">
     ...

问题在于,当我单击任何按钮进行分页时,displaytag会将我重定向到渲染阶段,而不是我想要的动作阶段。我究竟做错了什么?有任何想法吗..? 非常感谢

编辑:我可以在URL中看到参数p_p_url_type = 0(渲染阶段)。这对我来说没有意义,因为我正在调用一个动作网址,但也许只需将此参数更改为p_p_url_type = 1即可。但是,我只是不知道如何...任何想法?

http://localhost:8080/wsdes/user/sifo3/home?p_p_id=SifoIIIweb_WAR_sifo3economicoweb_INSTANCE_s8jH&p_p_lifecycle=1&p_p_url_type=0&p_p_state=maximized&p_p_mode=view&_SifoIIIweb_WAR_sifo3economicoweb_INSTANCE_s8jH_action=consultaJustificantes&_SifoIIIweb_WAR_sifo3economicoweb_INSTANCE_s8jH_implicitModel=true&_SifoIIIweb_WAR_sifo3economicoweb_INSTANCE_s8jH_d-49489-p=2

2 个答案:

答案 0 :(得分:0)

之前去过那里。我以不同的方式解决了这个问题,但在查看DisplayTag源代码时,我发现了一些有趣的东西。例如,在PortletHref中,您可以在addParameter方法中找到它:

     if (PARAM_TYPE.equals(name))
        {
           if (TYPE_RENDER.equals(value))
           {
               this.setAction(false);
           }
           else if (TYPE_ACTION.equals(value))
           {
              this.setAction(true);
           }

还有:

 private static final String PARAM_PREFIX = "portlet:";
 public static final String PARAM_TYPE = PARAM_PREFIX + "type";
 public static final String TYPE_ACTION = "action";

显然,如果您需要一个名为portlet:type且值为action的参数,以使DisplayTag生成一个Action URL。我没有测试过自己,所以让我知道它是否有效。

答案 1 :(得分:0)

我仍然不知道原因,但我修复了此问题,将Portlets的显示标记(displaytag-portlet.jar)更改为标准displaytag,并从displaytag.properties文件中删除factory.requestHelper属性: factory.requestHelper = org.displaytag.portlet.PortletRequestHelperFactory

使用普通的displaytag库而不是portlet来修复我的问题。