0

まず、これはかなり特定の問題である可能性があることを認めなければなりません。JavaServer Facesアプリケーションで、サーバー側でスクリプトを実行してユーザーと対話できるようにしたいと思います。

詳細を説明するために、私がやりたいことの例を示します。私のアプリケーションでは、ユーザーはデータを入力でき、サーバー側にはこのデータをチェック/変更できるスクリプトがあります。ユーザーがカスタムスクリプトを作成できるため、正確なスクリプトはわかりません。全体として、これまでのところ問題はありませんが、スクリプトでは、質問ダイアログの方法でユーザーと対話することができます。次の例では、それ以降のスクリプトの実行はユーザーの回答によって異なります。

...

if( inputData.equals("Something") ){
    if( askUser("Question?","Some question...") )
    {
        doSomething();
    }
    else
    {
        doSomethingElse();
    }
}

...

ご覧のとおり、メソッド「askUser」は、スクリプトを続行する前に結果を待機する必要があります。スクリプト自体はBeanshellスクリプトであり、メソッド「askUser」はBeanshellインタープリターによって呼び出されるJavaメソッドです。

スレッドとJava同期メソッドを使用してスクリプトを一時停止することを考えていましたが、EJBではスレッドの作成は許可されていません。それでも私はその方法を試しましたが、FacesContextがユーザー作成のスレッドで利用できないために失敗しました。

私の意図を明確にできればと思います。これをどのように行うことができるか、ご存知の方もいらっしゃると思います。よろしくお願いします。:)

4

1 に答える 1

1

あなたの質問は、JSFテクノロジーがどのように機能するかだけでなく、HTTP通信とWebサーバーの本質的にステートレスな性質についても完全に誤解していることを示しています。

通常、デスクトップベースのアプリケーションでは、上記の単純なアルゴリズムを、おそらくモーダルダイアログとイベントを使用して簡単に実装できます。Webアプリケーションは本質的にステートレスであるため、このようには機能しません。ユーザーまたはブラウザエージェントがWebサーバーにHTTPリクエストを送信すると、サーバーはこのリクエストを処理して応答を作成し、そのHTTP応答をブラウザエージェントに返してレンダリングします。通常、このデータは、テキスト、HTML、XML、Javascript、CSS、画像、またはファイルですらあります。

上記のアルゴリズムをサーバーに組み込む際の問題は、askUserサーバーがユーザーに質問して応答を待つことができないため、サーバーがの機能を実行できない可能性があることです。それは逆になります。ユーザーはクライアントであり、サーバーに質問します。

では、この一般的な問題はWebアプリケーションでどのように解決されるのでしょうか。JSFでは、サーバーは応答としてJavascriptをブラウザーに送信し、ブラウザーが質問を行えるようにします。ユーザーが選択すると、Javascriptはユーザーの選択をHTTPでサーバーにポストバックできます。リクエスト。その選択にDOMまたはページ要素への変更が含まれる場合、その情報は応答で送信されます。

JSFは、デスクトップとイベント駆動型の機能をステートレステクノロジーに与えることで、デスクトップとWebアプリケーション間のギャップを埋めます。これは、サーバー側にイベントライフサイクルを設定し、Ajaxを使用してドキュメント要素への変更を厳密に制御することで実現します。

JSFテクノロジに関する優れたチュートリアルはここにありますが、深く掘り下げる前に、HTTPおよびJavaサーブレットに精通することをお勧めします:http ://www.mkyong.com/tutorials/jsf-2-0-tutorials/

于 2012-03-06T12:58:49.483 に答える