0

簡単なJSFの例を作成して、いくつかのファイラーを作成しようとしています。私はMavenを使用しており、META-INFflolderfaces-confid.xmlに保存しています。

実行しようとすると、出力に次のように表示されます。

Welcome to JSF. 

しかし、それは次のようになります。

Welcome to JSF. test

はい、どうぞ:

Beanファイル

import java.io.Serializable;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;


@Named("test")
@RequestScoped
public class TestBean implements Serializable{
    private String test = "test";

    public String getTest() {
        return test;
    }

    public void setTest(String test) {
        this.test = test;
    }    
}

XHTMLファイル:

<?xml version="1.0" encoding="UTF-8"?>
<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>Welcome</title>
    </h:head>
    <h:body>
        <h3>Welcome to JSF. #{test.test}</h3>
    </h:body>
</html>
4

2 に答える 2

2

Java EE / JSF Web アプリケーションでは、基本的に 2 つの API を使用して Bean を管理できます。

それらは、最初の質問のように、

import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

@Named("test")
@RequestScoped

Bean を管理するための Java EE 標準化された方法であるCDI (Context and Dependency Injection) からのものです (Spring DI および AOP の中で標準化/置換するように設計されています)。これは、Glassfish、JBoss AS などの Java EE Web プロファイルをサポートするコンテナーでのみ使用できますが、Tomcat や Jetty などのベアボーン サーブレット コンテナーでは使用できません (ただし、個別にインストールできます。注意してください。Weld は CDI のリファレンス実装です。 Mojarra は JSF の参照実装であるため)。

CDI を実行するには/WEB-INF/beans.xml、webapp に物理ファイルが必要です。ファイル自体は空にしておくことができます。あなたの最初の問題は、あなたがそれを持っていなかったことを示唆しています。このファイルが存在しない場合、Web アプリケーション用に CDI が初期化されないため、サーバーの起動時間が短縮されます。

別の方法として、あなたが自分の答えで考えたように、

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean("test")
@RequestScoped

JSF自体からのものです。これは、Tomcat や Jetty などのベアボーン JSP/サーブレット コンテナーを含む、さまざまなコンテナー間で Web アプリケーションの移植性を維持する場合に特に役立ちます。実行するために追加の構成ファイルは必要ありません。

eager=trueリクエストスコープのBeanでは不要であることに注意してください。さらに、とにかく無視されます。アプリケーション スコープの Bean でのみ受け入れられます。たとえば、 Java FacesServlet を初期化するにはどうすればよいですかも参照してください。

于 2013-01-25T21:18:48.327 に答える
0

他の注釈を使用して修正

@ManagedBean(name = "test", eager = true)
@RequestScoped
于 2013-01-25T16:57:10.207 に答える