最近,我探讨了将常规JSF 2.0应用程序集成为portlet的可能性。
我做的第一件事就是下载Pluto 2.0(与tomcat捆绑在一起)和Myfaces Portlet Bridge 2。我创建了一个小型webapp(Core JSF 2.0第2章测验应用程序)。 正如我在教程中看到的,我在WEB-INF中创建了portlet.xml文件,其中包含以下内容:
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd"
version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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>QPortlet</portlet-name>
<portlet-class>javax.portlet.faces.GenericFacesPortlet</portlet-class>
<expiration-cache>0</expiration-cache>
<init-param>
<name>javax.portlet.faces.defaultViewId.view</name>
<value>faces/index.xhtml</value>
</init-param>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>VIEW</portlet-mode>
</supports>
<supports>
<mime-type>application/xhtml+xml</mime-type>
<portlet-mode>VIEW</portlet-mode>
</supports>
<portlet-info>
<title>QPortlet</title>
<short-title>QPortlet</short-title>
</portlet-info>
</portlet>
</portlet-app>
然后我在web.xml中添加了几行:
<servlet>
<servlet-name>QPortlet</servlet-name>
<servlet-class>org.apache.pluto.container.driver.PortletServlet</servlet-class>
<init-param>
<param-name>portlet-name</param-name>
<param-value>QPortlet</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>QPortlet</servlet-name>
<url-pattern>/PlutoInvoker/QPortlet</url-pattern>
</servlet-mapping>
已将相应的桥接器Jar复制到lib文件夹,打包为war文件并部署到Pluto。冥王星本身将我的webapp识别为portlet。很酷但是当我用portlet打开窗口时它只是空的。 Web应用程序可以单独运行,但不能作为portlet运行。 我已经尝试过MyFaces中的示例,但我能得到的最多的是以下异常:
Error rendering portlet portlet-bridge-carstore.
java.lang.IllegalArgumentException: Only supported in a portlet environment
at org.apache.myfaces.portlet.faces.util.map.PortletRequestMap.(PortletRequestMap.java:42)
...
我做错了吗? 我也尝试了JBoss Portlet Bridge,但我得到了同样的结果......