0

我正在使用 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}">
     ...

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

编辑:我可以在 URL 中看到参数 p_p_url_type=0(渲染阶段)。这对我来说毫无意义,因为我正在调用一个动作 url,但也许只需将此参数更改为 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
4

2 回答 2

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:typevalue命名的参数action来使 DisplayTag 生成一个 Action URL。我还没有测试过自己,所以让我知道它是否有效。

于 2013-01-15T20:02:01.237 回答
0

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

使用普通的 displaytag 库而不是 portlet 库解决了我的问题。

于 2013-01-21T08:00:05.813 回答