Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么是我的第一个;“你好,世界”;LifeRay portlet结果为“0”;暂时不可用。”;?_Java_Struts2_Liferay_Portlet_Struts Config - Fatal编程技术网

Java 为什么是我的第一个;“你好,世界”;LifeRay portlet结果为“0”;暂时不可用。”;?

Java 为什么是我的第一个;“你好,世界”;LifeRay portlet结果为“0”;暂时不可用。”;?,java,struts2,liferay,portlet,struts-config,Java,Struts2,Liferay,Portlet,Struts Config,我是LifeRay portlet开发的新手,在我正在进行的项目中创建“Hello World”测试portlet时遇到了一些问题 在本项目中,使用Structs 2进行调度 因此,我做了以下操作: 1) 我在这个文件夹中创建了TestPortlet1Action类:/Web/src/main/java/mypackage/actions/,在这里我定义了startTestPortlet1()方法,它是我的prolet的起始方法(我认为这就是portlet入口点): 其中k动作提供此动作界面:

我是LifeRay portlet开发的新手,在我正在进行的项目中创建“Hello World”测试portlet时遇到了一些问题

在本项目中,使用Structs 2进行调度

因此,我做了以下操作:

1) 我在这个文件夹中创建了TestPortlet1Action类:/Web/src/main/java/mypackage/actions/,在这里我定义了startTestPortlet1()方法,它是我的prolet的起始方法(我认为这就是portlet入口点):

其中k动作提供此动作界面:

包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;
}
因此return SUCCESS语句返回SUCCESS字符串

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


.portlet topper#portlet _SliderNewPortlet _WAR(战争)KMPortlets、.portlet标题#portlet _SliderNewPortlet _WAR(战争)KMPortlets{
显示:无
}
.portlet#portlet#SliderNewsPortlet(u WAR)kmportlet、.portlet内容#portlet(u SliderNewsPortlet(u WAR)kmportlet{
边界:0;
保证金:0;
填充:0;
背景:0;
}

测试端口1 Hello World Portlet 你好,世界

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>

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

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


日历
com.liferay.portal.kernel.servlet.PortletServlet
portlet类
org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher
0
日历
/历法/*
因此,第一节定义了servlet,第二节定义了映射到此servlet处理的URL模式。这是真的还是我遗漏了什么

那么,我要做什么来配置我以前的“Hello World测试”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>

测试端口1
com.liferay.portal.kernel.servlet.PortletServlet
portlet类
org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher
0
测试端口1
/测试端口1/*
这样行吗,还是我遗漏了什么

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>

测试端口1
测试端口1
org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher
视图名称空间
/测试端口1
defaultViewAction
startTestPortlet1
0
文本/html
看法
测试端口1
其中starttsetportlet1表示在我的action类中定义的方法starttsetportlet1()

7) 然后我将此语句添加到liferayportlet.xml配置文件中:

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

测试端口1
假的
8) 最后,我配置了文件liferaydisplay.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时,我得到的是这个内容,而不是预期的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>

com.liferay.portal.kernel.spring.context.PortletContextLoaderListener
Struts2服务器
org.apache.struts2.dispatcher.ng.servlet.StrutsServlet
Struts2服务器
*.行动
支柱2资源
org.apache.struts2.dispatcher.ng.servlet.StrutsServlet
支柱2资源
/支柱/*

处获取,请参见:。
<portlet>
    <portlet-name>testpPortlet1</portlet-name>
    <instanceable>false</instanceable>
</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>
<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>