LifeRay 포틀렛 개발이 처음인데, 현재 작업중인 프로젝트에 "Hello World"테스트 포틀릿을 작성하는 데 문제가 있습니다.왜 내 첫 "Hello World"LifeRay 포틀릿 결과가 "일시적으로 사용할 수 없게됩니까?"
이 프로젝트에서는 파견을 수행하는 데 Structs 2가 사용됩니다.
그래서 내가 수행 한 다음 작업 :
1) 나는이 폴더에 TestPortlet1Action 클래스를 만들 : 나는 startTestPortlet1 정의 곳 /웹/SRC/메인/자바/myPackage에/액션/ 내 protlet의 시작 방법() 방법 (나는이 포틀릿 진입 점이라고 생각) :
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이 일 저를 provde 곳 입니다 액션 인터페이스 :
패키지 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;
}
는 그래서
반환 성공는
성공 문자열을 반환 한 Statment.
2) 그럼 난 생 폴더에 testPortlet1.jsp (이름이 포틀릿에 대한 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 파일을 업데이트 할 필요가 있음을 알고
을당신이 내 안녕하세요 세계 포틀릿에 관련된 스트럿 구성 파일을 포함 시켰 볼 수 있듯이
<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>
,이 : 그래서 지금은
TestPortlet1-struts.xml 파일을 구성한
<include file="TestPortlet1-struts.xml"/>
4) 이 방법으로 :
<?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) 이제 내 문제는 제대로 폴더 ** \ 웹 \ SRC \ 주 \의 웹 애플리케이션 \의 WEB-INF에 내가 가진 것을합니다 (의 web.xml 파일을 구성하는 방법을 이해하는 것입니다 **). 나는이 파일에 뭘 이해에서 나는 스트럿츠 2 서블릿에 매핑 (또는 내가 잘못입니까?)
그래서 내가 (다른 작업 서블릿) 이런 일이 :
<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>
그래서 첫 번째를 섹션은 서블릿을 정의하고 두 번째 섹션은이 서블릿에 의해 처리되도록 매핑 된 URL 패턴을 정의했습니다. 그것은 사실입니까, 아니면 제가 빠진 것이 있습니까?
그래서 이전 "Hello World 테스트"서블릿을 구성하려면 어떻게해야합니까?이거 괜찮아?
<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>
이게 맞습니까? 아니면 뭔가 빠졌습니까?
<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 :
6) 그럼 추가, 폴더 ** \ 웹 \ SRC \ 주 \의 웹 애플리케이션 \의 WEB-INF **에 portlet.xml의 파일을 구성해야은 내 작업 클래스에서 startTestPortlet1()을 정의했습니다.
7) 그럼 난 을 Liferay-portlet.xml의 구성 파일에이 한 Statment를 추가 : 마지막으로 내가의 범주를 설정하는 파일 을 Liferay-display.cml을 구성
<portlet>
<portlet-name>testpPortlet1</portlet-name>
<instanceable>false</instanceable>
</portlet>
8) 내 포틀릿이 같은 :
<?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>
문제는 그 나는이 contet에게 대신 예상 안녕하세요 출력을 얻을 포털의 홈페이지에 내 포틀릿을 추가 할 때 :
testPortlet1을 일시적으로 사용할 수 없습니다.
에서 그것을 가지고 : http://struts.apache.org/docs/portlet-plugin .html. –