2014-12-19 14 views
1

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을 일시적으로 사용할 수 없습니다.

+0

에서 그것을 가지고 : http://struts.apache.org/docs/portlet-plugin .html. –

답변

1

아래처럼 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/