Server Java一:バックグラウンドJSF BeanとフロントJavascriptを実現


まず一つの問題から始めます.もし私たちのwebapplicationでgeodatabaseを編集したら、この時に編集を提出して保存するか、編集を提出してキャンセルする過程が必要で、みんなArcMAPを使ったことがあります.ArcMAPを使ったことがなければ、wordはいつも使ったことがあります.編集したものは、閉じると警告します.この問題はデスクトッププログラムの中ではまったく問題ではありません.webでは、serverとあなたのbrowserは数万キロ離れている可能性があります.あなたの側はbrowserを閉じなければなりません.アメリカのサーバーでは、あなたが閉じることを知ることができますか?サーバーの上で運行するのはJSFのBeanで、クライアントの運行するのはJavascriptで、どのようにJavascriptにバックグラウンドの情況を感知させて、ユーザーに1つのヒントを与えて、このようにとても良く私達のプログラムの友好性を表示することができて、人為的な調和のとれた社会を建設することに対しても大いに利益があります.では、このことをどうするか見てみましょう.
Browserが閉じるとonUnloadイベントが発生します.このイベントがあれば、次の文のようなことをする機会があります.情報を表示します.

<body onUnload="javascript: alert('      ?')">

bodyにこの文を追加すると、その優しい質問文が見えてきたのではないでしょうか.もしそうなら、あなたのBrowserはこのonUnload事件をサポートしています.このコードを見てみましょう.

function checkTime(){
var isModified=<c:out value="${editBean.edited }"/>;
  if(isModified ==true)
  alert("      ");
}

このコードはとても面白くて、その他は言いやすくて、よく理解できません.これはJSTLです.JSTLを見たことがなければ、googleかbaiduを見てみましょう.editBeanは標準的なJSFのbeanで、faces-configにあります.xmlファイルに配置されます.属性と属性のgetter、setterメソッドがあります.次のようにします.

private boolean edited=false;
                                                    
public boolean isEdited() {
return edited;
}
public void setEdited(boolean edited) {
this.edited = edited;
}

編集を開始するときはeditedをtrueに設定すればいいです.JSTLはタグでこのbeanの値にアクセスできます.これにより,フロントJavascriptとバックグラウンドJSF beanの連動が実現される.
AJAXとJSFはどのように結合しますか.
これは将来SERVER JAVAの開発者に聞かれる質問です.では、AJAXがサーバ上でクライアントと接続できるようにするにはどうすればいいのでしょうか.
AJAXを適用する条件は次のとおりです.
1、javascriptをサポートするブラウザです.もちろん、今主流のブラウザはJavascriptをサポートしています.
2、ブラウザはXMLHTTPまたはXMLHttpRequestオブジェクトをサポートする必要があります.
3.XMLで応答を送信できるサーバ側.サーバー側には多くの技術が実現でき、ASP、JAVAを使っても実現できます.もちろん,本稿で議論するのはJSF技術に限られる.
多くのサーバ・エンド・プログラムの作成に詳しいエンジニア、例えば私にとってJavascriptはまったく別の世界です.しかしJavascriptを知ることで、プログラムがより強くなり、開発が容易になります.興味深い機能は、ユーザーが地図を編集している間に、途中まで編集して保存を忘れてしまった場合、興味深い機能を作って、自動的に保存できることを思い出させることです.Google mailでは、この自動保存機能を感じたことがありますか?どうせ私はその時見たときびっくりした.サーバ側のプログラマーの考え方で考えると、不思議に思います.実際にこの機能はAjax技術で実現でき、1つのタイマーで5分おきに保存要求を自動的に送信すれば実現できる.
ユーザーを入力すると自動的にそのユーザーに関する情報が表示されるなど、自動検索の例を見てみましょう.
<input type="text" id="query" size="20" onkeyup="search(‘query’);">

Search(query)メソッドでは、Ajaxリクエストをクライアントに送信し、クエリーを行った後、結果をXMLリクエストで返すことで、ページ全体をリフレッシュして部分的に更新する必要がなくなります.このような小さな技術は、ユーザーがWeb閲覧を続けるときにより良い感じを与え、各サイトの模倣の対象となり、一部の開発者も宝物のようにAjaxと呼ぶ必要があり、プロジェクトの選択型の鍵になることを発見した.これもおそらく最初の開発者が想像できなかっただろう.
JavascriptがXMLhttpリクエストを送信する方法を見てみましょう.次のコードを見てみましょう.

if (window.XMLHttpRequest) {
  req = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
  req = new ActiveXObject("Microsoft.XMLHTTP");
}

これは、XMLHttpRequestをインスタンス化するコードです.インスタンス化すると、通常のオブジェクトを操作するように操作できます.次の方法は、サーバ側とのリンクを確立するなど、多くの方法があります.

req.open("GET", url, true);

1番目のパラメータはHTTPリクエストの方式:“Get”または“Post”であり、2番目のパラメータはサーバのURLであり、3番目のパラメータは非同期のリクエストである.ESRIのツールラベルをよく検討すると、これらのラベルにはclientPostBackプロパティがあり、非同期リクエストを行うかどうかを設定できることがわかります.Web ADFはオープンメソッドの3番目のパラメータを用いて後で必ず行われることが分かった.注意してください.clientPostBackをtrueに設定する場合は、javascriptコードを再構築する必要があります.そうでなければ、これらのコードは実行されない可能性があります.非同期リクエストは一部のページを更新するためです.
非同期リクエストとは、リクエスト時にブラウザが他のことをすることができることを意味しますが、サーバ側の処理が終了し、ページ上のデータを更新できることをどのように知ることができますか?XMLHttpRequestオブジェクトの方法を見てみましょう

req.onreadystatechange = processXMLResponse;

サーバ側の処理が終了するとprocessXML Responseメソッドを呼び出すことができ、このメソッドをプログラミングすることでリクエストを処理することができます.もちろん、onreadystatechangeメソッドにメソッドを登録すれば、任意の名前のメソッドであってもいいです.
XMLHttpRequestの初期化が完了すると、サーバ側にリクエストを送信できます.簡単な方法で行えます.

req.send(null);

もちろん、一般的にgetはあまりにも少ないので、私たちが最も関心を持っているのはPostです.Postがどうすればいいか見てみましょう.

req.open("POST", "/agsviewer", true);
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded";
req.send("__ADFPostBack__=true&formId=f"+"&mapId=Map0&ajaxdemo=ajaxdemo ");

Postはサーバ側にデータを送信することができます.これは私たちが必要としていることです.次に、現在のスケールを要求するコードを見てみましょう.

function updateInfoResponse(xmlHttp) {
if (xmlHttp != null && xmlHttp.readyState == 4 && xmlHttp.status == 200) {
  var xml = xmlHttp.responseXML;
  document.getElementById("scale").value = "1:" + xml.getElementsByTagName("scale").item(0).firstChild.nodeValue;
}
}

判断を見てみると(xmlHttp!=null&&xmlHttp.readyState==4&&xmlHttp.status==200、判断4は処理が終了したことを示し、判断200はHTTP要求が正常であることを示し、404のHTTP要求を見たことがあると信じられ、嫌な「page not found」である.
判断が完了するとxmlを用いる.getElementsByTagName("scale").item(0).firstChild.nodeValue;文はスケールを取ってくる.
AJAXがどうなっているのか大体知っていると思いますが、次は簡単な例を書きます.