2011-07-15 38 views
1

JSFに問題があります。遅延ELが解決されない

それ繰延評価(例えばのように見える#{bean.property}が解決されません即時評価(例えば${bean.property})正常に動作するように見える

次JSFページ:。。。。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1-strict.dtd"> 
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> 
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> 
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> 
<f:view> 
<html> 
<head> 
    <title>Hello World</title> 
</head> 
<body> 
    <h:form> 
    ${nameBean.name} 
    #{nameBean.name} 
    <h:outputText value="#{nameBean.name}"/> 
    </h:form> 
</body> 
</html> 
</f:view> 

私のweb.xml

01:以下のMaven依存関係

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
    <display-name>JSF Test</display-name> 
    <context-param> 
    <param-name>javax.faces.CONFIG_FILES</param-name> 
    <param-value>/WEB-INF/faces-config.xml</param-value> 
    </context-param> 
    <context-param> 
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
    <param-value>server</param-value> 
    </context-param> 
    <filter> 
    <display-name>Ajax4jsf Filter</display-name> 
    <filter-name>ajax4jsf</filter-name> 
    <filter-class>org.ajax4jsf.Filter</filter-class> 
    </filter> 
    <filter-mapping> 
    <filter-name>ajax4jsf</filter-name> 
    <servlet-name>Faces Servlet</servlet-name> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>INCLUDE</dispatcher> 
    <dispatcher>ERROR</dispatcher> 
    </filter-mapping> 
    <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> 
    <login-config> 
    <auth-method>BASIC</auth-method> 
    </login-config> 
    <welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 

:次のようになります私はおそらく何かを間違って設定

NameInBean 
#{nameBean.name} 
#{nameBean.name} 

が、私はどこを見れするかわからない:

<dependency> 
    <groupId>jstl</groupId> 
    <artifactId>jstl</artifactId> 
    <version>1.2</version> 
</dependency> 
<dependency> 
    <groupId>javax.faces</groupId> 
    <artifactId>jsf-api</artifactId> 
    <version>1.2_12</version> 
</dependency> 
<dependency> 
    <groupId>javax.faces</groupId> 
    <artifactId>jsf-impl</artifactId> 
    <version>1.2_12</version> 
</dependency> 
<dependency> 
    <groupId>com.sun.facelets</groupId> 
    <artifactId>jsf-facelets</artifactId> 
    <version>1.1.14</version> 
</dependency> 

は含むHTMLページに変換します。誰か助けてくれますか?

答えて

1

を使用して、私は私のTomcatサーバーを再インストールして、私のPOMを修正することを確認を確認してください.XML:

<dependency> 
    <groupId>org.apache.myfaces.core</groupId> 
    <artifactId>myfaces-api</artifactId> 
    <version>1.2.2</version> 
    <scope>compile</scope> 
</dependency> 
<dependency> 
    <groupId>org.apache.myfaces.core</groupId> 
    <artifactId>myfaces-impl</artifactId> 
    <version>1.2.2</version> 
    <scope>compile</scope> 
</dependency> 
<dependency> 
    <groupId>org.apache.myfaces.tomahawk</groupId> 
    <artifactId>tomahawk</artifactId> 
    <version>1.1.6</version> 
    <scope>runtime</scope>  
    <exclusions> 
    <exclusion> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
    </exclusion> 
    </exclusions>  
</dependency> 
<dependency> 
    <groupId>jstl</groupId> 
    <artifactId>jstl</artifactId> 
    <version>1.2</version> 
    <scope>runtime</scope> 
</dependency> 
<dependency> 
    <groupId>com.sun.facelets</groupId> 
    <artifactId>jsf-facelets</artifactId> 
    <version>1.1.11</version> 
</dependency> 

そして今のコードは動作します。

0

私は完全にはわかりませんが、#{nameBean.name}をJSFコンポーネントに入れる必要があります。 <h:outputText value="#{nameBean.name}"/>を試してみてください。統一式言語のa java.net articleから

遅延評価が統一ELを用いる技術は、JSPエンジンからの発現を評価する責任を引き継ぎ、中に適切な時に式を評価することを意味ページライフサイクル。 ELはJSPコンテナから制御を受けて、適切なタイミングで式を評価します。 JSF EL式は#{defExpr}という形式です。 JSF式はこのように動作します。

これは、JSFが遅延式を評価することを意味し、JSFコンポーネントに追加された場合にのみ認識します。即時式がまだ機能していることは、JSFがレンダリング応答フェーズで実行された後、サーブレット/ JSPエンジンがこれらの式を引き継いで評価することを意味します。したがって、遅延された式を使用して直接式を生成することさえできるかもしれません。

+0

は、残念ながらそれは私に同じ出力できます: '#{nameBean.name}'代わりにNameInBean' – Jasper

+0

'のあなたが' nameBean'を宣言しましたが'faces-config.xml'? – Thomas

+0

はい、ありました。 '$ {nameBean.name}'はBeanから正しい名前を取得します。どちらのオプションもそうではありません。 – Jasper

0

あなたはf:view-Tagを閉じないでください - これはおそらく問題かもしれませんか? Btw。それはhtmlタグに続くべきではありませんか?

+0

コピー/貼り付け中に何か問題が発生したため、コードサンプルを修正しました。 – Jasper

1

JSを書くのは面倒ですが、Faceletsライブラリ(JSFのより良い表示技術)が含まれています。

Faceletsは、テンプレートテキスト内で#{}構文の評価を可能にします。 JSPで


繰延EL式はそれらだけをサポートする属性タグで許可されている(通常のJavaServerはFacesコンポーネントを、それらをサポートするために、独自のカスタムタグライブラリを記述することが可能です)。 JSP 2.2 specから

のみ${}構文は、テンプレートテキスト内の式のために許可されています。テンプレートのテキストに#{}が使用されている場合は のエラーが発生します。 の下位互換性メカニズムで#{}がオフになっている場合を除きます。

あなたはdeferredSyntaxAllowedAsLiteral pageディレクティブを使用していないと、エラーを取得されていませんので、私はあなたのweb.xmlを使用すると、JSP 2.0またはそれ以前のルールデフォルトでないバージョンを定義することを推測しますFacesServletマッピングを介してページを処理しています。

  • は、あなたのweb.xmlのバージョン(あなたはより多くの情報が必要な場合は、ターゲット・サーバーとバージョンを述べる)
  • URLがFacesServlet mapping
+0

web.xmlを元の投稿に追加しました。そして私は次のURLの私のページにアクセスします:http:// localhost:8080/webproject/getName.faces' – Jasper

+0

@Psy - web.xmlに明らかな問題はありません。どのアプリケーションサーバー/バージョンをテストしていますか? – McDowell

+0

私は[Tomcat 6.0](http://tomcat.apache.org/tomcat-6.0-doc/index.html)で実行しています。 – Jasper

0

サーブレットAPI 2.5以降を使用する必要があります。

は、あなたのweb.xmlにバージョンを変更する必要が

<web-app 
    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-app_2_5.xsd" 
    version="2.5"> 
関連する問題