0

私はJSFおよびEJBアプリケーションを初めて使用するため、単純なJavaEEアプリケーションでも問題が発生します。私は、JSFのいくつかのタグとそれらのJava Beansへのバインドを試すことを目的として、JBossを使用してEclipseで単純なJavaEEアプリケーションを作成しています。次のJSfコードで出力ページに何も表示されない理由がわかりません。

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:ui="http://java.sun.com/jsf/facelets">

    <f:loadBundle basename="resources" var="msg" />
    <head>
    <title><ui:insert name="pageTitle">Page Title</ui:insert></title>
    <style type="text/css">

    </style>
    </head>

<body bgcolor="#ffffff">
<h:body>
<h:outputText value="#{hello.world}" />
<h:outputText value="TTT" />
</h:body>   
</body>

</html>  

Beanからの値hello.worldだけでなく、単純なテキスト「TTT」も表示されません。Beanのコードは次のとおりです。

@ManagedBean
public class Hello  {

final String world = "World";

/**
 * Default constructor. 
 */
public Hello() {
}

public String getWorld(){
    return "Hello" + world;
}

} 

facelets-config.xmlファイルは次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="2.1" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xi="http://www.w3.org/2001/XInclude"
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-facesconfig_2_1.xsd">
 <managed-bean>
  <managed-bean-name>hello</managed-bean-name>
  <managed-bean-class>com.al.jsftest.Hello</managed-bean-class>
  <managed-bean-scope>session</managed-bean-scope>
 </managed-bean>

</faces-config>

プレーンテキストでタグを試してみると、画面に表示されますが、#{hello.world}では再び機能しません。つまり、Beanへのバインドが失敗します。JSFタグが正常に出力されるようにするためのヒントが得られたらすぐに、BeanをJSFにバインドするために、何を処理する必要があるかについてのヒントをいただければ幸いです。

更新:同様の質問で も同じ問題のようですが、私のアプリケーションはEclipseとJBossであり、NetbeansとGlassFishではありません。したがって、web.xmlファイルを追加します。おそらくその変更が必要ですが、それでも理解できません。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee /web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
 <display-name>JsfTest</display-name>
  <welcome-file-list>
   <welcome-file>index.xhtml</welcome-file>
  </welcome-file-list>
  <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>

4

2 に答える 2

1

web.xml-fileで定義された JSF サーブレットによってページをロードする必要があることをサーバーに伝える必要があります。
あなたのサンプルが正しいことを理解していればindex.xhtml、Web サイトを呼び出して JSF を使用してユーザーに提示する必要があるというウェルカム ファイルがあります。

問題があります。定義した JSF サーブレット を「通過」させ
ない限り、すべてのページが JSF によってレンダリングされません。

サーブレットの定義は次のようになります。

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern> /* !important */
</servlet-mapping>

したがって、JSFサーブレットを使用してページをロードするようにサーバーに指示する方法は2つあります(確かにもっとあります:))。

  1. ウェルカム ファイルに JSF サーブレットをロードするように指示する

    <welcome-file-list>
      <welcome-file>faces/index.xhtml</welcome-file> /* note the /faces/ prefix */
    </welcome-file-list>
    
  2. <url-pattern>内側を伸ばすservlet-mapping

    <servlet-mapping>  
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
        <url-pattern>*.xhtml</url-pattern>  /*tell JSF to render all pages with xhtml-extension*/
    </servlet-mapping>
    

Netbeans+Glassfish と JBoss+Eclipse の間に違いはないはずですが、JSF ライブラリがサーバーによってロードされているかどうかを確認する必要があります。

最後に 1 つ:
Bean を 経由faces-config.xmlで構成していますが、これでうまくいきますが、JSF 2.x 以降では、アノテーションを 使用してクラス内で同じことを行うことができます。

@ManagedBean
@SessionScoped  
public class TestBean {
  // your stuff here
}

私にとって、これははるかに簡単で読みやすいです。

これが役に立てば幸いです、楽しんでください!

編集:
あなたのコメントの後、私はあなたのセットアップをテストしました:何も問題ありません!最初は、セットアップで定義されていなかっ
たためにエラーが発生しましたが、この行を削除した後、すべて正常に機能しました。<f:loadBundle basename="resources" var="msg" />

それにもかかわらず、最初のリスト項目で小さなタイプミスをしたので、もう一度確認してください。
あなたの xhtml-skeleton は私には問題なく見え、私のテストでも動作するので、何も問題はないはずです。

以下を確認してください。

  1. JSF ライブラリは、サーバーまたはアプリケーションのいずれかによってロードされますか?
  2. ファイル内に定義されたサーブレットはもうありますweb.xml
  3. 詳細なエラー メッセージは何ですか

乾杯!

于 2013-03-04T12:40:54.127 に答える
0

新しい動的Webプロジェクトを作成し、今回は「共通のフェイスレットページ」の代わりに「空白のフェイスレットページ」をテンプレートとして使用してindex.xhtmlファイルを追加しました。web.xmlファイルのurl-patternを*.xhtmlに変更しましたが、最終的にはブラウザーのフルパス名(\ index.xhtml)で機能するかどうかに関係なく機能しました。「CommonFaceletPage」で同じプロセスを実行した後、私はそれをうまく機能させることができませんでした。変。

また、「共通フェイスレットページ」を選択して「次へ」をクリックすると、ライブラリのリストが表示され、ユーザーはそれらのいくつかをチェックするオプションがあることに気づきました。私は何もチェックしませんでした、多分私は持っているべきです。

于 2013-03-04T14:18:00.000 に答える