Google Prettify

2014-09-29

如何組態 JSF? 搭配 Maven 讓你更無往不利

一個專案或是一個系統,在開始初期,一些config的動作,是很瑣碎的。雖然不是每天都在config project或是new project,但是真有需要new project時,也總是需要東copy 一段、西copy一段。為了方便自己參考,這裡整合了那些需要copy的東西。


使用Framework與前提

這篇文章裡所介紹的設定,主要base以下的環境。

  • JSF 2.2 (Mojarra)
  • PrimeFaces 5
  • Maven 3.1

    在Eclipse中使用的是Maven專案。

  • JSP 3.0 以上
  • Java 1.7

JSF 設定

web.xml

Core JSF

<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xhtml</param-value>
</context-param>
<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.faces</url-pattern>
</servlet-mapping> 
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping> 

JSF 2 以上, faces-cofnig.xml不是必需。但你也可以生一個。大型系統中,有faces-config.xml來統一管理頁面流程,會是一件很好的事。

JSF2 中建議以xhtml為副檔名,表示以XML架構來撰寫。 JSF 2 基本上就是符合XML規範的HTML

PrimeFaces

PrimeFaces基本上是可以不用設定。不過如果使用一些特效,或是看起來根本就不是標準CSS的呈現時,就需要設定。這裡主要是設定PrimeFaces theme的部份。

Theme的概念,簡單來說就像是Windows的配色一樣,可以有科技藍櫻桃紅 等搭配,一旦變更,包含底色、背景、字型等都會一起變更。 Theme 不只在PrimeFaces,其他許多的JSF implement也都有theme的概念與設定。

<context-param><!--Primefaces User Guide PDF, configuration section-->
    <param-name>primefaces.THEME</param-name>
    <param-value>bootstrap</param-value>
</context-param>

Maven

pom.xml

這邊是Maven的相關設定。使用Maven的好處是你以不用管理太多的library dependency的問題。 但即使如此,很多時候還是不如預期。以下是pom.xml的設定:

<dependency>
    <groupId>org.primefaces</groupId>
    <artifactId>primefaces</artifactId>
    <version>5.0</version>
</dependency>
<dependency>
    <groupId>org.primefaces.themes</groupId>
    <artifactId>bootstrap</artifactId>
    <version>1.0.9</version>
</dependency>
<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-api</artifactId>
    <version>2.2.2</version>
</dependency>
<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-impl</artifactId>
    <version>2.2.2</version>
</dependency>
<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.11-beta2</version>
</dependency>

發生了什麼事?

預期上,透過Maven,我只要告訴Maven 說我要使用PrimeFaces,只有PrimeFaces有使用到JSF,就應該被自動匯進來。但是事情不像傻人所想的那麼簡單。

首先, PrimeFaces必需依賴在其他JSF實作上。官網上沒寫,不過文件上有,必需依賴Mojarra或MyFaces。不管怎樣,在開發的時候,肯定需要使用到 jsf-api。然而需不需要在 Maven上匯入,或是需要匯入那種JSF實作,一部份的原因,取決於你所使用的container。Tomcat 肯定是沒有,所以必需透過Maven來自行匯入。另一部份原因,當然是看案子需要使用那種JSF實作。

Runtime 時期,Tomcat需要使用到jsf-impl,因此需要匯入。jstl實作也是如此。

Servlet那一段,看開發方式。可以值接使用container的servlet,也可以在Maven指定。

The Bug...

在開發的過程中,有遇到一些問題:

Complie 版本錯誤

每次update maven project時,總有complie 版本不對的問題。

Dynamic Web Module 3.0 requires Java 1.6 or newer. Maven Java EE Configuration Problem


解決方式:在Maven 的 pom.xml 增加 complier-plugin

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
</build>

faces-config.xml referenced file contains errors

聽說在faces-config.xml時會有一點問題…(未驗證,參考網址 qussay )

Referenced file contains errors    (jar:file:/Applications/eclipse/plugins/org.jboss.tools.jst.web_3.5.0. Final-v20130717-0309-B75.jar!/catalog/web-facesconfig_2_2.xsd).  For more information, right click on the message in the Problems View and select "Show Details..."

修改方式:將xml xsi schemal location 宣告 http://xmlns.jcp.org/xml/ns/javaee 拿掉。

沒有留言 :

您或許對這些有興趣

Related Posts with Thumbnails

最後

謝謝您的閱讀,希望您可以有豐富的收獲。