チェンジセット 115

差分発生行の前後
無視リスト:
コミット日時:
2007/09/26 16:11:36 (13 年前)
コミッタ:
shinomiya
ログメッセージ:

#517:im-Jssp RPCの統合

  • 通信エラー発生時のエラー内容伝達方法の修正。
  • CSJSライブラリの追加を自動化
ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • trunk/im-jssp-extention/src/main/assembly/ImartTagDoc/imart_tag_api.xml

    r98 r115  
    13441344                ここで指定するパスは、JSSPコンテンツのソースディレクトリからの相対パス形式になります。(デフォルトはコンテキストパスに対応する実際のパス)<br/> 
    13451345                <br/> 
    1346                 サーバの処理結果を非同期で受け取りたい場合は、属性 callback を指定します。<br/> 
     1346                サーバサイドの処理結果を非同期で受け取りたい場合は、属性 callback を指定します。<br/> 
    13471347                属性 callback には、CSJS関数名を指定します。 
    1348                 属性 callback が指定されている場合、サーバ側の処理結果が 属性 callback で指定されたCSJS関数の引数に渡されます。 
    1349                 <br/> 
    1350                 <br/> 
     1348                属性 callback が指定されている場合、サーバサイドの処理結果が 属性 callback で指定されたCSJS関数の引数に渡されます。<br/> 
     1349                <br/> 
     1350                属性 onErrorCallback には、非同期通信時にエラーが発生した場合に呼び出される関数名を指定します。<br/> 
     1351                属性 onErrorCallback で指定された関数の引数には、 
     1352                <a href="#JsspRpcComErrorObject">JSSP-RPC 通信エラーオブジェクト</a>が渡されます。<br/> 
     1353                 
     1354                <br/> 
     1355                <br/> 
     1356 
    13511357                <strong><i>例:</i></strong> 
    13521358                <blockquote> 
     
    13551361                以下を行うことによって、CSJSから上記関数を実行することができます。 
    13561362                <ol> 
    1357                         <li> 
    1358                                 HTMLファイルの &lt;HEAD&gt; タグ内に以下のCSJSライブラリを追加します。<br/> 
    1359                         </li> 
    1360 <pre> 
    1361 &lt;script language="JavaScript" src="csjs/im_jssp_rpc.js"&gt;&lt;/script&gt; 
    1362 &lt;script language="JavaScript" src="csjs/json.js"&gt;&lt;/script&gt; 
    1363 </pre> 
    1364                  
    13651363                        <li>HTMLファイル内に&lt;IMART type="jsspRpc"&gt; タグを以下のように記述します。</li> 
    13661364<pre> 
     
    13731371                </blockquote> 
    13741372                 
     1373                <br/> 
     1374                <br/> 
     1375 
     1376                <strong><i>JSSP-RPC 通信エラーに関して</i></strong><br/> 
     1377                &lt;IMART type="jsspRpc"&gt; タグを利用したサーバサイドとの通信でエラーが発生した際、 
     1378                そのエラー内容を格納したオブジェクトが伝達されます。<br/> 
     1379                <br/> 
     1380                通信エラーが発生するのは以下の場合です。<br/> 
     1381                <ul> 
     1382                        <li>レスポンスのHTTPステータスコードが「200」以外の場合 
     1383                                <font size="-1">(サーバサイドで実行時エラーが発生した場合を含みます)</font> 
     1384                        </li> 
     1385                        <!-- 
     1386                                <li>セッションタイムアウトが発生した場合</li> 
     1387                        --> 
     1388                        <li>Debug.browse()を実行した場合</li> 
     1389                </ul> 
     1390                <br/> 
     1391                JSSP-RPCの通信方式(同期通信 または 非同期通信)によって、エラーオブジェクトの伝達方法が異なります。<br/> 
     1392                 
     1393                <br/> 
     1394                同期通信の場合(=属性 callback が未指定の場合)、<br/> 
     1395                通信エラーの内容が<b>例外として投げられます。</b><br/> 
     1396                その為、同期通信を行う場合は、サーバサイドとの通信部分を try / catchで囲み、例外処理を記述してください。<br/> 
     1397                投げられる例外オブジェクトの構成は、<a href="#JsspRpcComErrorObject">JSSP-RPC 通信エラーオブジェクト</a>と同一です。<br/> 
     1398 
     1399                <br/> 
     1400                非同期通信の場合(=属性 callback が指定されている場合)、<br/> 
     1401                属性 onErrorCallback で指定された関数の引数に、 
     1402                <a href="#JsspRpcComErrorObject">JSSP-RPC 通信エラーオブジェクト</a>が渡されます。<br/> 
     1403                属性 onErrorCallback が未指定の場合は、関数「ImJsspRpc.defaultOnErrorCallback() 」が実行されます。<br/> 
     1404 
     1405                <br/>            
     1406                 
     1407                <a name='JsspRpcComErrorObject'> 
     1408                        <strong>JSSP-RPC 通信エラー オブジェクト</strong> 
     1409                </a> 
     1410                <br/> 
     1411                <table border="1" cellpadding="4" cellspacing="1"> 
     1412                        <tr> 
     1413                                <td rowspan="5"> 
     1414                                        <div align="center"> 
     1415                                                JSSP-RPC 通信エラー<br/>オブジェクト (Object)  
     1416                                        </div> 
     1417                                </td> 
     1418                                <td> 
     1419                                        <strong>httpStatus</strong> 
     1420                                        HTTPステータスコード (Number) 
     1421                                </td> 
     1422                        </tr> 
     1423                        <tr> 
     1424                                <td> 
     1425                                        <strong>code</strong> 
     1426                                        エラーコード (String) 
     1427                                </td> 
     1428                        </tr> 
     1429                        <tr> 
     1430                                <td> 
     1431                                        <strong>message</strong> 
     1432                                        エラーメッセージ (String) 
     1433                                </td> 
     1434                        </tr> 
     1435                        <tr> 
     1436                                <td> 
     1437                                        <strong>contentType</strong> 
     1438                                        レスポンスデータのコンテントタイプ (String)<br/> 
     1439                                </td> 
     1440                        </tr> 
     1441                        <tr> 
     1442                                <td> 
     1443                                        <strong>data</strong> 
     1444                                        レスポンスデータ(JavaScriptオブジェクト、XMLオブジェクト、または、テキスト) 
     1445                                </td> 
     1446                        </tr> 
     1447                </table> 
     1448 
     1449                <br/> 
     1450                <br/> 
     1451                 
    13751452                <strong><i>注意事項:</i></strong> 
    13761453                <blockquote> 
    13771454                <ul> 
    1378                         <li> 
    1379                                 HTMLファイルの &lt;HEAD&gt; タグ内に、必ず以下のCSJSライブラリを追加してください。<br/> 
    1380                         </li> 
    1381 <pre> 
    1382 &lt;script language="JavaScript" src="csjs/im_jssp_rpc.js"&gt;&lt;/script&gt; 
    1383 &lt;script language="JavaScript" src="csjs/json.js"&gt;&lt;/script&gt; 
    1384 </pre> 
    1385                                 (なお、im_jssp_rpc.js 、および、json.js は、URLの関係で呼び出し時のソースパスは変わります。<br/> 
    1386                                 &lt;IMART type="link"&gt;や&lt;IMART type="form"&gt;タグで画面遷移を行った場合は、 
    1387                                 csjs/im_jssp_rpc.js、および、csjs/json.js といった相対パス指定でリンクできます) 
    1388                         <br/> 
    1389                         <br/> 
    13901455                        <li> 
    13911456                                &lt;IMART type="jsspRpc"&gt; タグでは、 
     
    13941459                        <li> 
    13951460                                ブラウザとサーバ間通信のデータ形式は <a href="http://ja.wikipedia.org/wiki/JSON">JSON</a> です。 
    1396                 </li> 
    1397                         <li> 
    1398                                 JSONデータとJavaScriptオブジェクトの変換には、 
    1399                                 <a href="http://www.json.org/js.html">json.js</a> を改良したライブラリを使用しています。 
    14001461                        </li> 
    14011462                        <li> 
    1402                                 JSONデータとJavaScriptオブジェクトの変換を行うサーバサイドロジックのデフォルトは、jssp_rpc/common/json.js です。<br/> 
    1403                                 クライアントサイドロジックのデフォルトは、csjs/json.js です。<br/> 
     1463                                本タグで指定されたサーバロジック内では、以下の関数を利用することは出来ません。 
     1464                                <ul> 
     1465                                        <li>forward()</li> 
     1466                                        <li>redirect()</li> 
     1467                                        <li>secureRedirect()</li> 
     1468                                        <li>transmission()</li> 
     1469                                        <li>HTTPResponse#sendMessageBody()</li> 
     1470                                        <li>HTTPResponse#sendMessageBodyString()</li> 
     1471                                </ul> 
    14041472                        </li> 
    14051473                        <li> 
    1406                                 json.js内でArray、Boolean、Date、Number、Object、Stringに対してtoJSONString()関数を 
    1407                                 プロトタイプオブジェクトとして設定しています。<br/> 
    1408                                 その為、for/in ループ文で取得可能なオブジェクト要素一覧に toJSONString() 関数が列挙されます。<br/> 
    1409                                 取得した要素が自オブジェクトのプロパティかどうかを、hasOwnProperty() 関数等を利用し、 
    1410                                 必要に応じて判定してください。<br/> 
     1474                                &lt;IMART type="jsspRpc"&gt; タグでは、 
     1475                                プレゼンテーションページ(=HTMLファイル)とファンクションコンテナ(=JSファイル)が対になっている必要はありません。<br/> 
     1476                                任意のプレゼンテーションページ内で、任意のファンクションコンテナを呼び出すことが可能です。<br/> 
    14111477                        </li> 
    14121478                </ul> 
     
    14171483                <ul> 
    14181484                        <li> 
    1419                                 サーバサイドの「jssp_rpc_test/sample1.js」に定義されている「getNow()」関数を実行後、<br/> 
     1485                                サーバサイドの「<b><font color="green">jssp_rpc_test/sample1</font></b>.js」に定義されている 
     1486                                「<b><font color="red">getNow</font></b>()」関数を実行後、<br/> 
    14201487                                「Now = <i>(現在日付)</i>」をアラート表示します。 
    14211488                        </li> 
     
    14321499&lt;html&gt; 
    14331500    &lt;head&gt; 
    1434         &lt;script language="JavaScript" src="csjs/im_jssp_rpc.js"&gt;&lt;/script&gt; 
    1435         &lt;script language="JavaScript" src="csjs/json.js"&gt;&lt;/script&gt; 
    1436  
    14371501        &lt;IMART type="jsspRpc" 
    1438                name="jsSample
    1439                page="jssp_rpc_test/sample1"&gt; 
     1502               name="<b><font color="blue">jsSample</font></b>
     1503               page="<b><font color="green">jssp_rpc_test/sample1</font></b>"&gt; 
    14401504        &lt;/IMART&gt; 
    14411505         
    14421506        &lt;script language="JavaScript"&gt; 
    14431507            /** 
    1444              * 「jssp_rpc_test/sample1.js」の関数「getNow()」を実行します。 
     1508             * 「<b><font color="green">jssp_rpc_test/sample1</font></b>.js」の関数「<b><font color="red">getNow</font></b>()」を実行します。 
    14451509             */ 
    14461510            function execute(){ 
    1447                 var result = jsSample.getNow("Now = "); 
    1448                 alert(result); 
     1511                try{ 
     1512                    var result = <b><font color="blue">jsSample</font></b>.<b><font color="red">getNow</font></b>("Now = "); 
     1513                    alert(result); 
     1514                } 
     1515                catch(ex){ 
     1516                    alert(ex.message); 
     1517                    return; 
     1518                } 
    14491519            } 
    14501520        &lt;/script&gt; 
     
    14521522 
    14531523    &lt;body&gt; 
    1454         &lt;input type="button" value="実行" onclick="execute();"&gt; 
     1524        &lt;input type="button" value="実行(同期)" onclick="execute();"&gt; 
    14551525    &lt;/body&gt; 
    14561526&lt;/html&gt; 
     
    14621532                        <table border="1"> 
    14631533                                <tr> 
    1464                                         <th>サーバサイドの「jssp_rpc_test/sample1.js」</th> 
     1534                                        <th>サーバサイドの「<b><font color="green">jssp_rpc_test/sample1</font></b>.js」</th> 
    14651535                                </tr> 
    14661536                                <tr> 
    14671537                                        <td> 
    14681538<pre> 
    1469 function getNow( args ){ 
     1539function <b><font color="red">getNow</font></b>( args ){ 
    14701540    return args + (new Date()).toString(); 
    14711541} 
     
    14831553                <ul> 
    14841554                        <li> 
    1485                                 サーバサイドの「jssp_rpc_test/sample2.js」に定義されている「getObject()」関数を実行し、<br/> 
    1486                                 その結果オブジェクトをコールバック関数「callBackFunction」にて取得します。 
     1555                                サーバサイドの「<b><font color="green">jssp_rpc_test/sample2</font></b>.js」に定義されている 
     1556                                「<b><font color="red">getObject</font></b>()」関数を実行し、<br/> 
     1557                                その結果オブジェクトをコールバック関数「<b><font color="orange">callBackFunction</font></b>」にて取得します。 
    14871558                        </li> 
    14881559                </ul> 
     
    14981569&lt;html&gt; 
    14991570    &lt;head&gt; 
    1500         &lt;script language="JavaScript" src="csjs/im_jssp_rpc.js"&gt;&lt;/script&gt; 
    1501         &lt;script language="JavaScript" src="csjs/json.js"&gt;&lt;/script&gt; 
    1502  
    15031571        &lt;IMART type     = "jsspRpc" 
    1504                name     = "jsSample
    1505                page     = "jssp_rpc_test/sample2
    1506                callback = "callBackFunction"&gt; 
     1572               name     = "<b><font color="blue">jsSample</font></b>
     1573               page     = "<b><font color="green">jssp_rpc_test/sample2</font></b>
     1574               callback = "<b><font color="orange">callBackFunction</font></b>"&gt; 
    15071575        &lt;/IMART&gt; 
    15081576         
    15091577        &lt;script language="JavaScript"&gt; 
    15101578            /** 
    1511              * 「jssp_rpc_test/sample2.js」の関数「getObject()」を実行します。 
     1579             * 「<b><font color="green">jssp_rpc_test/sample2</font></b>.js」の関数「<b><font color="red">getObject</font></b>()」を実行します。 
    15121580             */ 
    15131581            function execute(){ 
     
    15261594                var str  = ""; 
    15271595                    str += "コールバック関数を確認するために"       + "\n"; 
    1528                     str += "サーバ側で5秒間スリープします。"       + "\n"; 
     1596                    str += "サーバサイドで5秒間スリープします。"   + "\n"; 
    15291597                    str +=                                            "\n"; 
    15301598                    str += "実行前"                                 + "\n"; 
     
    15421610 
    15431611                // サーバロジック実行 
    1544                 jsSample.getObject(obj); 
     1612                <b><font color="blue">jsSample</font></b>.<b><font color="red">getObject</font></b>(obj); 
    15451613            } 
    15461614             
     
    15491617             * コールバック関数 
    15501618             */ 
    1551             function callBackFunction( result ){ 
     1619            function <b><font color="orange">callBackFunction</font></b>( result ){ 
    15521620             
    15531621                // 内容を確認 
     
    15711639 
    15721640    &lt;body&gt; 
    1573         &lt;input type="button" value="実行" onclick="execute();"&gt; 
     1641        &lt;input type="button" value="実行(非同期)" onclick="execute();"&gt; 
    15741642    &lt;/body&gt; 
    15751643&lt;/html&gt; 
     
    15811649                        <table border="1"> 
    15821650                                <tr> 
    1583                                         <th>サーバサイドの「jssp_rpc_test/sample2.js」</th> 
     1651                                        <th>サーバサイドの「<b><font color="green">jssp_rpc_test/sample2</font></b>.js」</th> 
    15841652                                </tr> 
    15851653                                <tr> 
    15861654                                        <td> 
    15871655<pre> 
    1588 function getObject( args ){ 
     1656function <b><font color="red">getObject</font></b>( args ){ 
    15891657     
    15901658    // 受け取ったオブジェクトの内容を表示 
    1591     for(var idx in args){ 
    1592         if (args.hasOwnProperty(idx)) { 
    1593             Debug.print(idx + " : " + args[idx] + " [" + typeof args[idx] + "]") 
     1659    for(var prop in args){ 
     1660        if (args.hasOwnProperty(prop)) { 
     1661            Debug.print(prop + " : " + args[prop] + " [" + typeof args[prop] + "]") 
    15941662        } 
    15951663    } 
     
    16341702                <attr-name>callback</attr-name> 
    16351703                <description> 
    1636                         サーバの処理結果を非同期で受け取る際のコールバック関数名(CSJS関数名)<br/> 
    1637                         省略した場合は、同期通信を行い、サーバから結果が返却されるまで待ちます。 
     1704                        サーバサイドの処理結果を非同期で受け取る際のコールバック関数名(CSJS関数名)<br/> 
     1705                        省略した場合は、同期通信を行い、サーバサイドから結果が返却されるまで待ちます。 
    16381706                </description> 
    16391707                <required>false</required> 
    16401708        </attribute> 
     1709 
     1710        <attribute> 
     1711                <attr-name>onErrorCallback</attr-name> 
     1712                <description> 
     1713                        非同期通信時にエラーが発生した場合に呼び出される関数名(CSJS関数名)<br/> 
     1714                        省略した場合は、関数「ImJsspRpc#defaultOnErrorCallback() 」が実行されます。<br/> 
     1715                        (ImJsspRpc#defaultOnErrorCallback()は、csjs/im_jssp_rpc.js 内に定義されています)<br/> 
     1716                        なお、同期通信の場合(=属性 callback が未指定の場合)は、<br/> 
     1717                        属性 onErrorCallback に指定された関数は無視されます。 
     1718                </description> 
     1719                <required>false</required> 
     1720        </attribute> 
    16411721</imart-tag> 
    16421722