Liferay: портлет Facelet пуст

#jsf #liferay

#jsf #liferay

Вопрос:

Я разработал простой портлет facelet. Изменен ViewHandler в faces-config.xml , как сказано в книге:

 <?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config
1.1//EN" "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config xmlns="http://java.sun.com/JSF/Configuration">
 <application>
   <view-handler>
       com.sun.facelets.FaceletPortletViewHandler
   </view-handler>
 </application>
<factory>
    <faces-context-
        factory>com.liferay.util.bridges.jsf.myfaces.MyFacesContextFactoryImpl</faces-
        context-factory>
</factory>
</faces-config>
  

Есть 2 .xhtml страницы: template.xhtml

 <?xml version="1.0" encoding="UTF-8" ?>
<f:view xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html">
<html>
    <head>
    </head>
    <body>
        <h:outputText value="block"></h:outputText>
        <h:outputLabel value="label" for="input"/>
        <h:inputText id="input"/>
        JUST TEXT
        <ui:insert name="insertBlock">
            <h:outputText value="defaultText"></h:outputText>
        </ui:insert>
    </body>
</html>
  

и вставлен block.xhtml

 <?xml version="1.0" encoding="UTF-8" ?>
<ui:composition template="template.xhtml"
            xmlns="http://www.w3.org/1999/xhtml"
            xmlns:ui="http://java.sun.com/jsf/facelets"
            xmlns:h="http://java.sun.com/jsf/html">
  <ui:define name="insertBlock">
    <h:outputText value="Inderted block"/>
    <h:outputLabel value="test label" for="testInput"/>
    <h:inputText id="testInput"/>
  </ui:define>

</ui:composition>
  

portlet.xml:

 <?xml version="1.0" encoding="UTF-8"?>

<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" 
   xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd 
   http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd">
<portlet>
    <portlet-name>LiferayFirstPortlet_war_exploded</portlet-name>
    <display-name>LiferayFirstPortlet_war_exploded</display-name>
    <portlet-class>com.test.HelloWorld</portlet-class>
    <init-param>
        <name>default-view</name>
        <value>insertedBlock.xhtml</value>
    </init-param>
    <expiration-cache>0</expiration-cache>
    <supports>
        <mime-type>text/html</mime-type>
    </supports>
    <portlet-info>
        <title>LiferayFirstPortlet_war_exploded</title>
    </portlet-info>
    <security-role-ref>
        <role-name>administrator</role-name>
    </security-role-ref>
    <security-role-ref>
        <role-name>guest</role-name>
    </security-role-ref>
    <security-role-ref>
        <role-name>power-user</role-name>
    </security-role-ref>
    <security-role-ref>
        <role-name>user</role-name>
    </security-role-ref>
</portlet>
 </portlet-app>
  

Когда я развертываю этот портлет на Liferay — ошибок не отображается. Но когда я добавляю портлет на страницу, ОН ПУСТ — просто пустой прямоугольник. Код страницы (проверка html-кода в fireBug) показал, что в портлете также нет содержимого.

Что я сделал не так?

Ответ №1:

Вы включили артефакты, специфичные для liferay? Для развертывания порлета в liferay артефакту требуются некоторые файлы конфигурации, специфичные для liferay. Вы можете создать скелетный артефакт, используя Liferay Plugin SDK. (Вы можете найти его в разделе «Загрузка дополнительных файлов».)

Или вы можете загрузить образцы JSF и изменить его в соответствии со своей конфигурацией.

Комментарии:

1. Кстати, о какой книге вы говорите??

2. Да, я добавил liferay-display.xml и liferay-portlet.xml . И когда я попробовал их для чистого JSF (без facelets), все работало нормально.

3. Книга называется «JavaServer Faces 2.0. Полная ссылка.»

4. Работал ли портлет Jsf без Facelets? Просто проверьте библиотеки, которые вы упаковали, и сравните их с библиотеками в примере проекта..

5. ДА. Я сделал это. Изменений нет… Может кто-нибудь, пожалуйста, попытаться развернуть мой портлет?