在 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,它捕获仅在控制面板-> 用户组织中更新的用户详细信息的数据