0

私はjsfテクノロジーを使用してWebアプリを開発しています。アプリのホームページが表示されたときに、バッキング Bean のメソッドを呼び出す必要があります。通常、ユーザーがリンクまたはボタンをクリックすると、バッキング Bean メソッドが関与します。

つまり、バッキング Bean がデータベースからデータを取得して jsf ページに送信し、ユーザーがアプリのホームページ リンクを呼び出したときにこれが発生するようにしたいと考えています。

問題を解決したかった方法は次のとおりです。予期されるリンクが呼び出されたときに実行されるサーブレットを使用し、そのサーブレットからバッキング Bean を呼び出します。しかし問題は、web.xml ファイル内のサーブレットの URL パターンに問題があることです。私のアプリのホームページ リンクは、home.jsf です。私のサーブレットの名前は HomeServlet で、web.xml ファイルで構成した方法は次のとおりです。

   <servlet>
       <servlet-name>HomeServlet</servlet-name>
       <servlet-class>utils.HomeServlet</servlet-class>
       <load-on-startup>1</load-on-startup>
   </servlet>
   <servlet-mapping>
       <servlet-name>HomeServlet</servlet-name>
       <url-pattern>/home.jsf</url-pattern>
   </servlet-mapping> 

そのため、アプリを実行するとサーブレットは実行されますが、home.jsf ページは空です (完全に空白です)。どうしてか分かりません。

だから私が知りたいのは:

  • この問題に対して正しいアプローチを使用していますか?

  • はいの場合、どの URL パターンを使用すればよいですか?

4

1 に答える 1

0

いいえ、これは間違いなく正しいアプローチではありません。あなたはJSFを回避しています。@PostConstructビューに関連付けられたリクエストまたはビュースコープの JSF マネージド Beanのコンストラクターまたはメソッドでジョブを実行する必要があります。

例えば

@ManagedBean
@RequestScoped
public class Home {

    public Home() {
        // Here.
    }

    @PostConstruct
    public void init() {
        // Or here. This will be invoked *after* any dependency injections,
        // such as @EJB, @ManagedProperty, @Inject, @Resource, etc.
    }

    // ...
}

JSF が(または) で初めて#{home.someproperty}参照に遭遇するたびに、Bean が構築されます。home.xhtmlhome.jsp

JSF で開発する場合、他のサーブレットを開発する必要はありません。JSF では、FacesServlet必要なすべての要求/応答およびモデル/ビュー制御ジョブを既に実行している唯一のサーブレットです。

于 2012-06-03T23:13:57.717 に答える