为什么我的第一个"Hello World" LifeRay组件结果是"temporarily unavailable."?



我绝对是LifeRay Portlet开发的新手,在创建"Hello World"测试portlet到我正在处理的项目中时遇到了一些问题。

在这个项目中,它使用结构 2 来执行调度。

所以我做了以下操作:

1( 我

在这个文件夹中创建了 TestPortlet1Action 类:/Web/src/main/java/mypackage/actions/,其中我定义了 startTestPortlet1(( 方法,它是我的 protlet 的启动方法(我认为这是 portlet 入口点(:

package egp.prc.km.actions.testPortlet1;
import egp.prc.km.actions.KMAction;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
@Controller("TestPortlet1")
@Scope("prototype")
public class TestPortlet1Action extends KMAction {
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    private String message;

    public String startTestPortlet1() {
        this.setMessage("Hello World !!!");
        return SUCCESS;
    }
}

其中 KMAction 向我提供了这个操作界面:

Package com.opensymphony.xwork2;

public interface Action  {
    java.lang.String SUCCESS = "success";
    java.lang.String NONE = "none";
    java.lang.String ERROR = "error";
    java.lang.String INPUT = "input";
    java.lang.String LOGIN = "login";
    java.lang.String execute() throws java.lang.Exception;
}

因此,返回 SUCCESS 语句返回成功字符串。

2(然后我为这个名为testPortlet1.jsp的portlet创建了一个JSP视图(到这个文件夹中:/Web/src/main/webapp/testPortlet1/testPortlet1.jsp(:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="sj" uri="/struts-jquery-tags" %>
<style>
    .portlet-topper#portlet_SliderNewsPortlet_WAR_KMPortlets, .portlet-title#portlet_SliderNewsPortlet_WAR_KMPortlets {
        display: none
    }
    .portlet#portlet_SliderNewsPortlet_WAR_KMPortlets, .portlet-content#portlet_SliderNewsPortlet_WAR_KMPortlets {
        border: 0;
        margin: 0;
        padding: 0;
        background: 0;
    }
</style>
<hr style="height:1px;border:none;color:#1d8843;background-color:#1d8843;width: 98%" size="4px">
<table width="100%">
    <tr>
        <td>
            <table class="homePortletTitle">
                <tr>
                    <td style="padding-bottom: 0px;"><img src="/km-theme/images/km-icons/section_icon_focus.png"></td>
                    <th style="">TestPortlet1</th>
                    <td style="">Hello World Portlet</td>
                </tr>
            </table>
        </td>
    </tr>
    <tr>
        <td>
          <p>Hello World !!!</p>
        </td>
    </tr>
</table>

3(所以现在我知道我必须更新包含以下内容的struts.xml文件(它已放入Web/main/resources文件夹中(:

<struts>
    <constant name="struts.objectFactory" value="spring"/>
    <constant name="struts.devMode" value="false"/>
    <constant name="struts.locale" value="en_US"/>
    <constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
    <constant name="struts.custom.i18n.resources" value="km_international"/>
    <package name="kmAjaxPackage" extends="struts-default" namespace="/">
        <interceptors>
            <interceptor name="liferayAjax" class="liferayAjaxInterceptor"/>
            <interceptor-stack name="kmAjaxStack">
                <interceptor-ref name="defaultStack"/>
                <interceptor-ref name="liferayAjax"/>
            </interceptor-stack>
        </interceptors>
        <default-interceptor-ref name="kmAjaxStack"/>
    </package>
    <include file="chat-struts.xml"/>
    ..................................
    ..................................
    ..................................
    <include file="TestPortlet1-struts.xml"/>
</struts>

如您所见,我已经包含了与我的hello world portlet相关的struts配置文件,这个:

<include file="TestPortlet1-struts.xml"/>

4(所以现在我已经配置了TestPortlet1-struts.xml文件,这样:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <package name="TestPortlet1Package" extends="struts-portlet-default" namespace="/testPortlet1">
        <action name="startFocusAction" class="FocusAction" method="startFocus">
            <result name="success">/testPortlet1/testPortlet1.jsp</result>
        </action>
    </package>
</struts>

5(现在我的问题是了解如何正确配置web.xml文件(我已将其放入文件夹**\Web\src\main\webapp\WEB-INF**(。根据我在这个文件中的理解,我有与 Struts 2 servlet 的映射(或者我错了?

所以我有这样的东西(对于另一个工作的servlet(:

<servlet>
    <servlet-name>calendar</servlet-name>
    <servlet-class>com.liferay.portal.kernel.servlet.PortletServlet</servlet-class>
    <init-param>
        <param-name>portlet-class</param-name>
        <param-value>org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>calendar</servlet-name>
    <url-pattern>/calendar/*</url-pattern>
</servlet-mapping>

因此,第一部分定义了 servlet,第二部分定义了映射到此 servlet 处理的 URL 模式。是真的还是我错过了什么?

那么我该怎么做才能配置我以前的"Hello World test"servlet呢?可以吗?

<servlet>
    <servlet-name>testPortlet1</servlet-name>
    <servlet-class>com.liferay.portal.kernel.servlet.PortletServlet</servlet-class>
    <init-param>
        <param-name>portlet-class</param-name>
        <param-value>org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>testPortlet1</servlet-name>
    <url-pattern>/testPortlet1/*</url-pattern>
</servlet-mapping>

这是可以的还是我错过了什么?

6(然后我必须将portlet.xml文件配置到文件夹**\Web\src\main\webapp\WEB-INF**中,并添加:

<portlet>
        <portlet-name>testPortlet1</portlet-name>
        <display-name>testPortlet1</display-name>
        <portlet-class>org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher</portlet-class>
        <init-param>
            <name>viewNamespace</name>
            <value>/testPortlet1</value>
        </init-param>
        <init-param>
            <name>defaultViewAction</name>
            <!--<value>savePhoto</value>-->
            <value>startTestPortlet1</value>
        </init-param>
        <expiration-cache>0</expiration-cache>
        <supports>
            <mime-type>text/html</mime-type>
            <portlet-mode>VIEW</portlet-mode>
        </supports>
        <portlet-info>
            <title>testPortlet1</title>
        </portlet-info>
    </portlet>

其中 startTestPortlet1 表示在我的操作类中定义的方法 startTestPortlet1((。

7(然后我把这个语句添加到liferay-portlet.xml配置文件中:

<portlet>
    <portlet-name>testpPortlet1</portlet-name>
    <instanceable>false</instanceable>
</portlet>

8(最后我配置了文件liferay-display.cml来设置我的portlet的类别,如下所示:

<?xml version="1.0"?>
<!DOCTYPE display PUBLIC
        "-//Liferay//DTD Display 6.0.0//EN"
        "http://www.liferay.com/dtd/liferay-display_6_0_0.dtd">
<display>
    <category name="First category">
        <category name="Second inner category">
            <category name="Third inner category">
                <category name="chat">
                    <portlet id="ChatNavigatorUser"/>
                    <portlet id="ChatNavigator"/>
                </category>
                <category name="testcategory">
                    <portlet id="TestPortlet1"/>
                    <portlet id="testPortlet1"/>
                </category>
              </category>
        </category>
    </category>
</display>

问题是,当我尝试在门户的主页上添加我的 portlet 时,我获得了这个 contet 而不是预期的 Hello World 输出:

testPortlet1 暂时不可用。

您必须

配置Web.xml如下所示:

<web-app id="WebApp_ID" version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<listener>
<listener-class>com.liferay.portal.kernel.spring.context.PortletContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>struts2servlet</servlet-name>
<servlet-class>org.apache.struts2.dispatcher.ng.servlet.StrutsServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>struts2servlet</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>struts2Resources</servlet-name>
<servlet-class>org.apache.struts2.dispatcher.ng.servlet.StrutsServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>struts2Resources</servlet-name>
<url-pattern>/struts/*</url-pattern>
</servlet-mapping>
</web-app>

从 http://www.roytuts.com/integrate-struts-2-in-liferay-portlet/那里得到的

最新更新