【问题标题】:Liferay getting URL params issueLiferay 获取 URL 参数问题
【发布时间】:2016-05-09 23:49:51
【问题描述】:

我有一个页面,其中部署了一个 portlet,在我的 portlet 中,我使用浏览器中的 url 访问一些参数,例如:

localhost.com:8080/mypage?text=helloworld

使用

PortalUtil.getOriginalServletRequest(request).getParameter("text")

它工作正常。

当view.jsp 渲染存在一些延迟(例如在 Java 代码中放置一些调试器)并且同时再次调用渲染 portlet view.jsp 但这次我无法读取“文本”参数时,问题就出现了请求

从客户端调用的url如下:

> http://localhost:8080/c/portal/render_portlet?p_l_id=92438&p_p_id=editor_WAR_heliumportlet&p_p_lifecycle=0&p_t_lifecycle=0&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_pos=0&p_p_col_count=2&p_p_isolated=1&currentURL=
> ...

此网址不包含我的参数,我无法找到触发此网址的线索。任何帮助将不胜感激。

【问题讨论】:

    标签: java jsp url liferay url-parameters


    【解决方案1】:

    如果加载时间过长(例如,当附加到调试器时),Liferay 可以推送要异步呈现的 portlet。这是因为render-weight and ajaxable 的默认值允许这样做。在liferay-portlet.xml 中更改它们。

    还请注意,获取非命名空间的通用 HTTP 参数不是规范的一部分,这就是为什么 Liferay 在通过 AJAX 呈现时不关心将非命名空间参数从原始 URL 转发到您的 portlet。换句话说:通过使用这种技术,您可能正在为将来遇到更多麻烦做好准备。

    【讨论】:

    • 如果我将 ajaxable 设为 false 是完全安全还是取决于我的实现?
    • 是的,它是安全的。我不知道除了调试器(或渲染缓慢)之外的任何缺点都会影响整个页面的加载时间。
    • 谢谢,如果我使用命名空间参数,我无法在浏览器刷新调用的 jsp 文件中获取它们??
    【解决方案2】:

    就 portlet 可以与其他 portlet 共享同一页面而言,portlet 使用具有前缀或名称空间。

    如果这个 portlet 不可实例化,这个命名空间对于给定的 portlet 总是相同的。或者这个命名空间可以是可变的,目的是对每个 portlet 实例都是唯一的。

    因此,portlet 的参数必须以命名空间为前缀。

    然后,使用诸如..之类的实用工具访问此参数将很容易。

    ParamUtil.get(renderRequest, "paramName", "defValue");
    

    这里是java文档

    https://docs.liferay.com/portal/6.2/javadocs-all/com/liferay/portal/kernel/util/ParamUtil.html

    问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 2015-11-25
      相关资源
      最近更新 更多