Liferay中利用URL传参数

时间:2022-10-12 04:33:21

业务场景:现在有一个新闻系统,有两个页面,A是新闻列表页面/web/guest/home,B是新闻的详情页面/web/guest/newsview。

业务逻辑为:在A页面中,点击新闻的标题进入B页面,在B页面的展现相应的新闻详情。

解决方案:此类场景可以使用URL传递参数。

URL传递参数与传统web一样。形式是:/web/hqw/newsview?id=XXX。

我们只来实现一个小例子,与上面的场景基本一致。

  1. 首先我们先要在插件工程中创建两个Portlet,一个是Portlet1(表示新闻列表的portlet),一个是News(表示新闻详情的portlet)。
  2. 新建一个页面newPage。如图示:

    Liferay中利用URL传参数

注,如果和我的页面不一样,可以依照下面的方法去修改一下主题即可。访问->控制面板->站点页面->选择一个外观->保存 。即可。如下图:

     Liferay中利用URL传参数

    如果页面是英文的,想换成中文,可以在端口号后面加上/zh即可。如下:

http://localhost:8080/zh/web/guest/newpage

  3. 将第一步中创建的两个portlet添加到不同的页面中,News添加到新建的页面newPage中(添加->更多->示例->找到News->添加),并记录下详情页面的URL地址:http://localhost:8080/zh/web/guest/newpage

     Liferay中利用URL传参数

4. 把Portlet1的view.jsp文件输入以下内容:

<%@ page pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>

<portlet:defineObjects />

<a href="/zh/web/guest/newpage?id=222">点击跳转</a>

  5. 重写News对应的类的doView方法。如下:

public class News extends MVCPortlet {

       @Override

       public void doView(RenderRequest renderRequest,

                     RenderResponse renderResponse) throws IOException, PortletException {

              // TODO Auto-generated method stub

              //取出前台发送的id值

              HttpServletRequest request = PortalUtil.getHttpServletRequest(renderRequest);

               String id = PortalUtil.getOriginalServletRequest(request).getParameter("id");

               renderRequest.setAttribute("id", id);

              super.doView(renderRequest, renderResponse);

       }

}

  关键点在这里,在这里只要取到URL中的id这个参数,就可以根据这个新闻id获取到新闻的具体内容,将新闻的相关信息放到request里面,再在页面中显示。

  6. 编写News Portlet所对应的view.jsp文件,让id值显示出来。

<%@ page pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>

<portlet:defineObjects />

您要查询的id值为:${id }

重新部署之后运行项目。点击portlet1中的a标签如下:

     Liferay中利用URL传参数

  然后会跳转到News所在的页面,并且会把id值显示出来:如下所示:

    Liferay中利用URL传参数

解析:

  (1) 点击上面的新闻列表的时候浏览器会将地址跳转到http://xxx/web/guest/newsview? newsId =XXX的页面。这个时候会执行新闻详情的portlet中的doView方法。

  (2) 点击第二步中的a标签,就会跳转到带有新闻详情的portlet的页面中,并且会把参数(id)发给此页面中的所有的portlet中(也包括新闻详情的portlet)。

  (3) 取这个URL的参数必须使用如下的两行代码而不能直接在renderRequest里面取:

HttpServletRequest request = PortalUtil.getHttpServletRequest(renderRequest);
String articleId = PortalUtil.getOriginalServletRequest(request).getParameter("articleId");

参考地址:http://www.huqiwen.com/2012/12/25/use-liferay-url-param/