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