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

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

感谢任何建议

【问题讨论】:

    标签: jsp view controller liferay


    【解决方案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 类?或者我们如何创建多个控制器?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多