在 liferay 的视图中显示控制器数据

Posted

技术标签:

【中文标题】在 liferay 的视图中显示控制器数据【英文标题】:Display Controller data in view in liferay 【发布时间】:2012-05-28 08:28:01 【问题描述】:

我到处找都找不到,或者我的搜索不够好。无论如何,这是我的问题。如何在 liferay MVC 中显示和/或将数据从控制器传输到视图 jsp 文件?即,如果变量“var”在控制器 java 类中包含值“这是一个变量”,我如何在 jsp 文件中显示和/或访问它?或者说简单点...我们如何将值从控制器传递到 liferay MVC 中的 jsp 视图?

感谢任何建议

【问题讨论】:

【参考方案1】:

根据您使用的框架,有几个选项可以实现这一目标。 (Liferay MVC Portlet、spring portlet、JSF)

对于这个答案,我假设您使用 MVC Portlet:

让我们来看看大家最喜欢的例子 hello world:

public class HelloWorldPortlet extends MVCPortlet

    @Override
    public void doView(RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException 

        renderRequest.setAttribute("helloMessage", "Hello World");
        super.doView(renderRequest, renderResponse);
    




现在这不能开箱即用!

在您的 portlet.xml 中更改:

<portlet-class>com.liferay.util.bridges.mvc.MVCPortlet</portlet-class>

收件人:

<portlet-class>**Your Package structure**.HelloWorldPortlet</portlet-class>

view.jsp

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

<portlet:defineObjects />

<%-- Option A --%>
<h1>
    <c:out value="$helloMessage" />
</h1>

<%-- Option B --%>
<% 
        String message = (String)request.getAttribute("helloMessage");
%>
<h1>
    <%= message %>
</h1>

自定义操作:

View.jsp

<portlet:actionURL name="worldHello" var="worldpageURL" />

<aui:a href="$worldpageURL">World hello</aui:a>

<h2><c:out value="$worldHello"/></h2>

HelloWorldPortlet

public class HelloWorldPortlet extends MVCPortlet

    @Override
    public void doView(RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException 

        renderRequest.setAttribute("helloMessage", "Hello World");
        super.doView(renderRequest, renderResponse);
    



    public void worldHello(ActionRequest request, ActionResponse renderResponse)
        request.setAttribute("worldHello", "World Hello");
    

根据您的 cmets,最好调查一下:

http://www.liferay.com/community/liferay-projects/liferay-faces/documentation 由于基于 JSF 的 portlet 可能是未来的主要关注点

http://www.liferay.com/community/blogs?p_p_id=115&p_p_lifecycle=0&p_p_state=normal&p_p_mode=view&_115_struts_action=%2Fblogs_aggregator%2Fview_entry&_115_entryId=13443886

【讨论】:

doView() 函数是强制传递值还是我们可以为此目的使用任何函数? doView() 将在 portlet 显示在页面上时被调用。 好的,我们如何在另一个函数中初始化 RenderRequest 对象?我们可以将该函数中的值传递给 doView 函数以进行显示吗? 我不确定初始化 RenderRequest 对象是否是个好主意。让 Liferay 为您创建对象,您在 doView() 方法中接收它,然后施展魔法,然后调用基类。如果您自己这样做,您可能会遇到问题,因为许多约定都发生在幕后。 哦哦,问题是我必须动态显示值,并且在使用任意数量的页面调用某个函数之后,我们如何使用 doView 来满足该条件?多个控制器?是否可以有多个 portlet 类?或者我们如何创建多个控制器?

以上是关于在 liferay 的视图中显示控制器数据的主要内容,如果未能解决你的问题,请参考以下文章

一步步开发Liferay门户:Service Builder生成持久化层

如何在 liferay 6.2 CE 中创建一个 UserModelListener,它捕获仅​​在控制面板-> 用户组织中更新的用户详细信息的数据

检查 Liferay 管理员用户登录

Liferay 6 - 显示网页内容页面

Liferay 6 - 将 Web 内容显示 Portlet 居中

Liferay-删除控制面板菜单