Календарь PrimeFaces 5.0 в портлете на WebSphere Portal 8.5 Исключение NullPointerException

#primefaces #portlet #websphere-portal

#primefaces #портлет #websphere-portal

Вопрос:

Я пытаюсь развернуть простой портлет с календарем PrimeFaces 5.0 на IBM WebSphere Portal 8.5. Это работает, но стрелки на календаре не отображаются, и я получаю исключение NullPointerException в моей консоли WAS.

JSF-Portlet-Code:

 <!-- jsf:pagecode language="java" location="/src/pagecode/TestPortletView.java" --><!-- /jsf:pagecode -->
<div xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:portlet="http://java.sun.com/portlet_2_0"
    xmlns:p="http://primefaces.org/ui">

    <h:head></h:head>

     <h:form>

        <p:calendar value="#{pc_TestPortletView.date}" />
        <p:commandButton update="display" value="Submit" />
        <h:outputText id="display" value="#{testBean.date}" />

    </h:form>
</div>
  

Резервный компонент:

 package pagecode;

import java.util.Date;

public class TestPortletView extends PageCodeBase {

    private Date date = new Date();

    public Date getDate() { return date; }

    public void setDate(Date date) { this.date = date; }
}
  

Трассировка стека:

 [03.07.14 12:03:19:806 CEST] 00000120 ErrorPageWrit E   An exception occurred
                                 java.lang.NullPointerException
    at org.apache.myfaces.application.ResourceHandlerImpl.getWrappedResourceName(ResourceHandlerImpl.java:670)
    at org.apache.myfaces.application.ResourceHandlerImpl.getWrappedResourceName(ResourceHandlerImpl.java:678)
    at org.apache.myfaces.application.ResourceHandlerImpl._getContentType(ResourceHandlerImpl.java:650)
    at org.apache.myfaces.application.ResourceHandlerImpl.handleResourceRequest(ResourceHandlerImpl.java:380)
    at javax.faces.application.ResourceHandlerWrapper.handleResourceRequest(ResourceHandlerWrapper.java:62)
    at org.primefaces.application.PrimeResourceHandler.handleResourceRequest(PrimeResourceHandler.java:132)
    at javax.faces.application.ResourceHandlerWrapper.handleResourceRequest(ResourceHandlerWrapper.java:62)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:183)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1230)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:779)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478)
    at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:136)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:79)
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:960)
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1064)
    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3837)
    at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304)
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:981)
    at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662)
    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:200)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:459)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:526)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:312)
    at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:88)
    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175)
    at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
    at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
    at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
    at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
    at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
    at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1864)
  

Есть идеи, что приводит к этой ошибке?
Тот же код на «обычной» JSF-странице (не в портлете) работает как по волшебству…

Спасибо за любую помощь!

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

1. При наведении курсора мыши на область, где в календаре должны быть стрелки, консоль Firefox-JavaScript указывает, что выполняется поиск изображения через GET localhost:10039/.TestPortlet/javax.faces.resource/images/… — Это неверный URL портала. Есть идеи, как это изменить?

2. Если я использую только /faces / * в качестве шаблона URL вместо *.faces, это, кажется, работает. Возможно, ошибка в Primefaces?