2013-06-02 89 views
1

我的名字是Tomasz,這是我的第一個問題。這是我的問題。Spring-Webflow + Primefaces應用程序無法正常工作

我是一名初級Java EE開發人員,我在Java EE,Spring,Spring-Webflow,JSF 2和Primefaces方面擁有4個飛蛾經驗。我想通過自己的Web應用程序來了解更多信息。 我沒有使用我提到的技術開始一個新項目的經驗,所以基本上我複製了一個模板應用程序並稍微改變了它(主要是刪除了現在不需要的不必要的功能)。所以我的應用程序包含:
- 春3.2.2
- 春天的Webflow 2.3.2
- JSF 2.1.22
- Primefaces 3.5
- 和Hibernate JPA(沒關係,這部分做工不錯) 。

作爲服務器,我使用Tomcat 7.0.40。

我使用很多配置教程配置了我的應用程序。應用程序起作用,它沒有警告,但它不能正常工作。讓我告訴你的屏幕截圖:

Firt一個,當我啓動應用程序,它看起來像這樣:
http://oi44.tinypic.com/2wd4od3.jpg

但我按F5刷新瀏覽器之後,它看起來像它應該從一開始就:
http://oi39.tinypic.com/17fr06.jpg

對我來說這是一個非常奇怪的行爲,我不知道它爲什麼會發生。瀏覽器無關緊要。我已經在Chrome,FireFox和IE上試過了 - 效果相同。

另外p:commandLink似乎不理我。我點擊它並沒有任何反應。當我有選擇

ajax="false" 

使它看起來像頁面被刷新,但仍然沒有任何反應。我在工作中用primefaces和swf工作了很多,而這一切從未發生過。

下面是我的應用程序的一些細節,我可以要求張貼的所有內容:

模板(main.xhtml):

<!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:f="http://java.sun.com/jsf/core" 
xmlns:h="http://java.sun.com/jsf/html" 
xmlns:ui="http://java.sun.com/jsf/facelets" 
xmlns:p="http://primefaces.org/ui"> 
<ui:include src="/WEB-INF/layout/fragments/layout.xhtml" /> 
</html> 

佈局(layout.xhtml):

<!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:c="http://java.sun.com/jsp/jstl/core" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:p="http://primefaces.org/ui"> 
<f:view contentType="text/html" encoding="UTF-8"> 
    <h:head> 
    </h:head> 

    <h:body> 
     <!-- outputStyle have to be here, otherwise css order is wrong --> 
     <h:outputStylesheet id="cssStandard" library="css" name="standard.css" /> 
     <!--  <h:outputStylesheet id="cssStandard" library="css" name="simple.css" /> --> 
     <h:form> 
      <div id="glass" 
       style="position: absolute; width: 100%; height: 100%; z-index: 2000; display: none;"></div> 

      <ui:include src="/WEB-INF/layout/fragments/ajaxError.xhtml" /> 

      <p:layout id="layout" fullPage="false" 
       style="width: 1000px; height: 900px; margin: 0 auto;"> 
       <p:layoutUnit position="north" size="150"> 
        <ui:include src="/WEB-INF/layout/fragments/north.xhtml" /> 
       </p:layoutUnit> 
       <p:layoutUnit position="center"> 
        <h:form> 
         <ui:insert name="content" /> 
        </h:form> 
       </p:layoutUnit> 
      </p:layout> 

      <p:outputPanel id="dialogs" style="display:block; overflow: auto;"> 
       <ui:insert name="dialogs" /> 
      </p:outputPanel> 
     </h:form> 
    </h:body> 

</f:view> 
</html> 

導航菜單(north.x HTML):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:c="http://java.sun.com/jsp/jstl/core" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:p="http://primefaces.org/ui"> 
    <h:form> 
     <a href="#{facesContext.externalContext.requestContextPath}"> <p:graphicImage 
       name="logo.png" library="images/application" /> 
     </a> 
     <h:panelGrid columns="3" style="width: 100%"> 
      <h:column> 
       <p:menubar style="width: 300px"> 
        <p:menuitem value="Strona Główna" action="forwardTo" ajax="false"> 
         <f:setPropertyActionListener target="#{flowController.flowId}" 
          value="main" /> 
        </p:menuitem> 
        <p:submenu label="MENU_2"> 
        </p:submenu> 
       </p:menubar> 
      </h:column> 
      <h:column> 
       <h:outputText value="Zalogowany jako: " style="float: right" /> 
      </h:column> 
      <p:column> 
       <p:menuButton 
        value="#{mainController.loggedUser != null ? mainController.loggedUser.login : 'Gość'}"> 
        <p:menuitem value="Zaloguj" action="forwardTo" ajax="false"> 
         <f:setPropertyActionListener target="#{flowController.flowId}" 
          value="login" /> 
        </p:menuitem> 
        <p:menuitem value="Wyloguj" /> 
       </p:menuButton> 
      </p:column> 
     </h:panelGrid> 


    </h:form> 
</ui:composition> 

基flow.xml

<?xml version="1.0" encoding="UTF-8"?> 
<flow xmlns="http://www.springframework.org/schema/webflow" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/webflow 
     http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd" 
    abstract="true"> 

    <end-state id="endAndForwardTo" view="flowRedirect:#{flowController.flowId}" /> 

    <global-transitions> 
     <transition on="forwardTo" to="endAndForwardTo" validate="false" /> 
     <transition on="endAndForwardTo" to="endAndForwardTo" /> 
    </global-transitions> 


</flow> 

FlowController.java

package tomashoov.polskielowiska.flow; 

import org.apache.log4j.Logger; 
import org.springframework.context.annotation.Scope; 
import org.springframework.stereotype.Component; 

@Component 
@Scope("session") 
public class FlowController { 

    private Logger LOG = Logger.getLogger(FlowController.class); 

    public final static String MAIN = "main"; 
    public final static String LOGIN = "login"; 

    private String flowId = MAIN; 

    public String getFlowId() { 
     return flowId; 
    } 

    public void setFlowId(String flowId) { 
     this.flowId = flowId; 
    } 
} 

如果需要更多的詳細信息,請告訴我。

回答

1

我遇到了完全相同的問題,我在這個問題上挖了一點,並且我做了一個解決這個問題的工作(因爲我在我的項目中很晚)。稍後我會回來一個強大的解決方案,但這裏是我得到的:

您正在使用Spring Webflow開始頁面是index.jsp,​​強制重定向到主Web流。

你會發現在你的瀏覽器控制檯2 JavaScript錯誤:

  1. ReferenceError: $ is not defined
  2. ReferenceError: PrimeFaces is not defined

這些錯誤是由於缺少JavaScript文件:

  1. 的JQuery的JavaScript。
  2. Primefaces JavaScript。
  3. 佈局JavaScript。

請注意,還有CSS文件丟失,這就是爲什麼頁面佈局大小和位置錯過了。

因此,顯然<h:head></h:head>標籤沒有在重定向中獲取一些Primefaces JavaScript文件和CSS。我發現一個問題here與重定向資源獲取失敗。建議的解決方案是在<h:head></h:head>中添加<h:outputScript library="primefaces" name="jquery/jquery.js" target="head" />。所以,我在<h:head></h:head>中添加了缺少的腳本和CSS文件,它的功能就像一個魅力。

<h:outputStylesheet library="primefaces" name="primefaces.css" /> 
<h:outputStylesheet library="primefaces" name="layout/layout.css" /> 

<h:outputScript library="primefaces" name="jquery/jquery.js" target="head" /> 
<h:outputScript library="primefaces" name="jquery/jquery-plugins.js" target="head" /> 
<h:outputScript library="primefaces" name="primefaces.js" target="head" /> 
<h:outputScript library="primefaces" name="layout/layout.js" target="head" />