2011-12-05 10 views
1

UIViewRoot如何留空?那不是組件樹的根組件?在這一點上,我有一個相對簡單的JSF Web應用程序,並不知道它爲什麼失敗。UIViewRoot使用JSF加上Liferay上的PortletFaces橋爲空

特別是,我有一個h:panelGroup

<h:panelGroup id="xmlValidationResults" layout="block" 
     styleClass="tp-form-action-results" 
     rendered="#{configuration.xmlValidationResult != null}"> 

這工作正常,但如果我增加額外的渲染條件:

<h:panelGroup id="xmlValidationResults" layout="block" 
     styleClass="tp-form-action-results" 
     rendered="#{configuration.xmlValidationResult != null && configuration.xmlValidationResult.warningOrWorse}"> 

我最終得到在我的日誌中的這些錯誤信息:

20:43:07,796 ERROR LiferayLocalePhaseListener:61 - viewRoot is null! 
20:43:07,797 ERROR [render_portlet_jsp:154] java.lang.NullPointerException 
    at org.portletfaces.bridge.BridgeImpl.indicateNamespacingToConsumers(BridgeImpl.java:594) 
    at org.portletfaces.bridge.BridgeImpl.doFacesRequest(BridgeImpl.java:426) 
    at org.portletfaces.bridge.GenericFacesPortlet.doEdit(GenericFacesPortlet.java:138) 
    at javax.portlet.GenericPortlet.doDispatch(GenericPortlet.java:330) 
    at javax.portlet.GenericPortlet.render(GenericPortlet.java:233) 
    at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:100) 
    at com.liferay.portal.kernel.portlet.PortletFilterUtil.doFilter(PortletFilterUtil.java:64) 
    at com.liferay.portal.kernel.servlet.PortletServlet.service(PortletServlet.java:93) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:72) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:75) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646) 
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551) 
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488) 
    at com.liferay.portlet.InvokerPortletImpl.invoke(InvokerPortletImpl.java:639) 
    at com.liferay.portlet.InvokerPortletImpl.invokeRender(InvokerPortletImpl.java:726) 

爲了完整,這裏是我的template.xhtml:

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 
    <h:head /> 
    <h:body> 
    <h:outputStylesheet library="css" name="liferay-tableau-portlet.css" 
     target="head" /> 
    <h:outputScript library="js" name="liferay-tableau-portlet.js" target="head" /> 
    <h:panelGroup styleClass="tp-container" layout="block"> 
     <h:panelGroup styleClass="tp-header" layout="block"> 
     <ui:insert name="header"></ui:insert> 
     </h:panelGroup> 
     <h:panelGroup styleClass="tp-content" layout="block"> 
     <ui:insert name="content">Whoops, you should not be seeing this...</ui:insert> 
     </h:panelGroup> 
     <h:panelGroup styleClass="tp-footer" layout="block"> 
     <ui:insert name="footer"></ui:insert> 
     <h:messages id="liferayTableauPortletMessages" globalOnly="true" 
      showDetails="true" /> 
     </h:panelGroup> 
    </h:panelGroup> 
    </h:body> 
</html> 

這裏是我的網頁:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"> 
<body> 
    <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="header"> 
     <h:panelGroup styleClass="tp-application-info"> 
     <span>#{configuration.applicationName} 
      #{configuration.applicationVersion} 
      (#{configuration.applicationBuildTimestamp})</span> 
     </h:panelGroup> 
    </ui:define> 

    <ui:define name="content"> 
     <h:form id="form"> 
     <h:panelGroup id="formFields" styleClass="tp-form-fields"> 
      <fieldset class="tp-form-fieldset"> 
      <div> 
       <h:outputLabel id="xmlLabel" for="xml" styleClass="tp-label">XML Configuration:</h:outputLabel> 
      </div> 
      <h:inputTextarea id="xml" value="#{configuration.xml}" 
       validator="#{configuration.validateXml}" cols="80" rows=10 /> 
      </fieldset> 
     </h:panelGroup> 
     <h:panelGroup id="xmlValidationResults" layout="block" 
      styleClass="tp-form-action-results" 
      rendered="#{configuration.xmlValidationResult != null}"> 
      <span>can you see me?</span> 
     </h:panelGroup> 
     <h:panelGroup id="formActions" styleClass="tp-form-actions"> 
      <h:commandLink id="createWebContentAction" styleClass="tp-action" 
      action="#{configuration.createWebContent}"> 
      <span>Create Web Content</span> 
      </h:commandLink> 
      <h:commandLink id="extractTableauThumbnailsAction" 
      styleClass="tp-action" 
      action="#{configuration.extractTableauThumbnails}"> 
      <span>Extract Tableau Thumbnails</span> 
      </h:commandLink> 
     </h:panelGroup> 
     </h:form> 
    </ui:define> 
    </ui:composition> 
</body> 

</html> 

回答

2

你忘了<f:view/>標籤周圍<h:head/><h:body>