2011-08-09 38 views
1

JSF 2.0にアップグレードすることを決めましたが、残念ながらこれはうまく機能しませんでした。我々は今Mojarra、Tomahawk 2.0 1.1.11、Spring Webflow/Faces 2.3.0、JSF 2.0を持っています。JSF 1.2から2.0への移行に関する問題

私はupgrading tutorial from BalusCに従った。最初のステップは、web.xmlを修正し、Servlet API 2.5に移行することでした。

<context-param> 
    <param-name>javax.faces.FACELETS_LIBRARIES</param-name> 
    <param-value>/WEB-INF/facelets-taglibs/custom.taglib.xml</param-value> 
</context-param> 

<!-- Use JSF view templates saved as *.xhtml, for use with Facelets --> 
<context-param> 
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name> 
    <param-value>.xml</param-value> 
</context-param> 

この後、私は依存関係を置き換え、新しいバージョンのJSFを使用しました。

<dependency> 
    <groupId>com.sun.faces</groupId> 
    <artifactId>jsf-api</artifactId> 
    <version>2.0.3</version> 
</dependency> 

<dependency> 
    <groupId>com.sun.faces</groupId> 
    <artifactId>jsf-impl</artifactId> 
    <version>2.0.3</version> 
</dependency> 

私はまたfaces-config.xmlにすべての変更を行ってきた

<?xml version="1.0" encoding="UTF-8"?> 
<facelet-taglib version="2.0" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
       http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"> 

<namespace>http://www.custom.org/facelets-taglib</namespace> 

[...] 

、私たちのカスタムタグライブラリを調整し、新しいXMLスキーマ定義に移行。

これは私の*.jspxファイルの1つです。

<?xml version="1.0" encoding="UTF-8"?> 
<html xmlns="http://www.w3.org/1999/xhtml" version="2.0" 
    xmlns:jsp="http://java.sun.com/JSP/Page" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:c="http://java.sun.com/jstl/core" 
    xmlns:sf="http://www.springframework.org/tags/faces" 
    xmlns:os="http://www.custom.org/facelets-taglib"> 
    [...] 
    ${os:json()} 
</html> 

このファイルが正常に動作する前に、特定の機能が呼び出されました。今では、印刷します。

Caused by: javax.faces.FacesException: /WEB-INF/views/example.jspx(10,2) 
     The attribute prefix os does not correspond to any imported tag library 
    at com.sun.faces.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl.java:136) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:115) 
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:135) 
    at org.springframework.faces.webflow.FlowLifecycle.render(FlowLifecycle.java:80) 
    at org.springframework.faces.webflow.JsfView.render(JsfView.java:90) 
    at org.springframework.webflow.engine.ViewState.render(ViewState.java:296) 
    at org.springframework.webflow.engine.ViewState.refresh(ViewState.java:243) 
    at org.springframework.webflow.engine.ViewState.resume(ViewState.java:221) 
    at org.springframework.webflow.engine.Flow.resume(Flow.java:545) 
    at org.springframework.webflow.engine.impl.FlowExecutionImpl.resume(FlowExecutionImpl.java:261) 
    ... 67 more 
Caused by: org.apache.jasper.JasperException: /WEB-INF/views/example.jspx(10,2) 
     The attribute prefix os does not correspond to any imported tag library 
    at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40) 
    at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407) 
    at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:148) 
    at org.apache.jasper.compiler.Validator$ValidateVisitor$1FVVisitor.visit(Validator.java:1509) 
    at org.apache.jasper.compiler.ELNode$Function.accept(ELNode.java:129) 
    at org.apache.jasper.compiler.ELNode$Nodes.visit(ELNode.java:200) 
    at org.apache.jasper.compiler.ELNode$Visitor.visit(ELNode.java:242) 
    at org.apache.jasper.compiler.ELNode$Root.accept(ELNode.java:56) 

あなたは私に私が何かを欠場かの可能なバグが隠すことができなかった任意のヒントを与えることはできますか?どうもありがとうございました!

+2

例外は基本的に '/ WEB-INF/facelets-taglibs/custom.taglib.xml'が見つからないことを示しています。ファイル名が正しいこと、そして名前空間が正しいこと(大文字と小文字を区別しています!また、Mavenを使用していることがわかります。/WEB-INF/facelets-taglibs/custom.taglibを確認できますか?xml'ファイルは実際には、ターゲットコンテナ内の配備されたWARファイルにも存在しますか? – BalusC

+0

名前は間違いなく正しいです。私はプロジェクト名を削除するだけで匿名にします。名前空間は正しい(大文字と小文字を区別します)。 'custom.taglib.xml'も展開された戦争にあります。また、javax.faces.application.Application.Applicationを継承する 'SpringApplication'を追加し、Springからいくつかのコンポーネントをロードします。エラーがありますか?または、正しく実装されていない新しい方法ですか? – codevour

+1

Wait ... Faceletsの代わりにJSPXを使用しています! JSF2のJSPXを使ったことは一度もありませんでしたが、 '.jspx'の名前を' .xhtml'に変更しようとしています(余分な 'xmlns:jsp' taglibも削除してください)。 'javax.faces.DEFAULT_SUFFIX'コンテキストパラメータも削除してください。既定値は '.xhtml'です。それが問題を解決すれば私に教えてください。そして、私はこのコメントを答えに変えます。 – BalusC

答えて

2

FaceletsではなくJSPXを使用しています。これは、JSF 2.0で完璧に動作することはありません。 JSPXがサポートされているJSF 2.1にアップグレードする場合は、.jspxファイルの名前を.xhtmlに変更し、余分なxmlns:jsp taglib宣言を削除する必要があります。 コンテキストパラメータも削除します。既定値は.xhtmlです。

1

.jspxファイルを扱う際の問題は、JSF 2.1でMyFaces Trinidadを管理している人たちのおかげで処理されました。付録A 1.2.1.1 facelets処理要素を参照してください。これを有効にすると、faceletsエンジンで.jspxファイルを読み取り、変更を最小限に抑えることができます。

<faces-config-extension> 
    <facelets-processing> 
     <file-extension>.jspx</file-extension> 
     <process-as>jspx</process-as> 
    </facelets-processing> 
</faces-config-extension> 

をそしておそらくJSPX拡張子を追加するjavax.faces.FACELETS_VIEW_MAPPINGSまたはjavax.faces.DEFAULT_SUFFIX Web構成のparamを設定します。いくつかの言葉で自分の顔-config.xmlの上でこれを追加します。

この後、たぶん唯一の問題は古いJSタグをfacelets TagHandlerに変換し、EL関数をFacelets関数に変換することだけです。私はそれは簡単な仕事だと思うし、それを行う価値がある。とにかく、この手順もやる必要があるでしょう。

この代替方法には、既存のナビゲーションルールまたはページ拡張を変更する必要がないという利点があります。したがって、JSFの観点から見ると、この代替方法が優先されます。

これについてさらにご質問がある場合はMyFaces Users and Dev Mailing Listsに回答し、質問をしてください。

関連する問題