=========================================================== Ninja-VA Engine 移行時の注意事項 =========================================================== Copyright(c) by SIOS Technology, Inc. All rights reserved. ■Ver 4.0_008p2 旧バージョンのNinja-VAからの移行時の注意事項を説明いたします。 該当する項目を全てチェックしてください。 (例:Ver 4.0_004から4.0_008p2への移行の場合、 - Ver 4.0_008p1以前のバージョンからの移行 - Ver 4.0_007p2以前のバージョンからの移行 - Ver 4.0_005以前のバージョンからの移行 - Ver 4.0_004p1以前のバージョンからの移行 - Ver 4.0_004以前のバージョンからの移行   の5箇所を参照してください。) -------------------- Ver 4.0_008p1以前のバージョンからの移行 -------------------- [BW010246] など js/*.jsファイルを修正していますので、Webブラウザのキャッシュをクリアしてから お使いください。            また、APサーバのJSPのworkフォルダの下をクリアしてからお使いください。 -------------------- Ver 4.0_007p2以前のバージョンからの移行 -------------------- 【重要:BW010239】・use_ninjava_auth=trueで運用しているWebアプリケーションに対して、セッション固定攻撃           が行なわれた場合の対策として、WebObjectContainer.authorize()メソッドを追加しました。 WebObjectContainer.authorize(HttpServletRequest, HttpServletResponse, boolean); 3番目の引数(boolean)にtrueを設定して呼び出すと、セッションIDを振り直します。 - HttpSessionを利用している場合: HttpSessionを破棄した後、HttpSessionを再作成します。 Cookieに_CID(Ninja-VAのセッションID)の値も出力します。 httpsを利用している場合は、CookieのSecure属性をtrueにすることを推奨します。 - HttpSessionを利用していない場合:            _CID(Ninja-VAのセッションID)を振り直します。 従来のWebObjectContainer.authorize()メソッドも引き続き利用可能ですが、セッションIDが 振り直されないため、セッション固定攻撃(*1)を受けた場合に、悪意を持った第三者にログイ ン済の利用者のページが表示されてしまう恐れがあります。新しいauthorizeメソッドを利用 することを推奨いたします。  変更例:   //----this.getContainer().authorize(); // 変更前 this.getContainer().authorize(request, response, true); // 変更後 ただし、ログイン後のページでWebブラウザのリロードボタンを押すと、古いセッションIDが WebブラウザからWebサーバへ送信されることで、不正アクセスとみなされ、ログインページへ 戻る場合があります。 このような場合は、運用ポリシーでリロードボタンを使用禁止とするか、または、 ログイン後にリダイレクトを行なうページを挟むような画面構成としてください。  × ログイン画面→ログイン後の最初の画面(メニュー画面など)           (Webブラウザのリロードボタンを押すと、ログインページへ            戻ってしまう。)  ○ ログイン画面→ログイン後の最初の画面へリダイレクトするだけの画面          →ログイン後の最初の画面(メニュー画面など)           (Webブラウザのリロードボタンを押しても、ログインページへ            戻ることはない。)          サンプル「SampleMydo」のLoginWebObject および WEB-INF/jsp/login_redirect.jsp を          参考にしてください。          (*1)セッション固定攻撃の例:           1.悪意を持った第三者Xがログインページにアクセスし、URLを取得する。           2.Xが正規のユーザAへメールなどを使って、ログインページのURL            (https://xxx.xxx/app/login?_CID=xxx&_WID=xxx)を送りつける。           3.送られてきたURLにAがアクセスし、ログインに成功する。           4.ログインに成功した頃を見計らい、Xが再度URLにアクセスする。             → Aのログイン後のページが表示される。 -------------------- Ver 4.0_005以前のバージョンからの移行 -------------------- [BW010190] ・HTMLScrollPaneまたはHTMLSubDataViewArea内にHTMLDataViewを表示しているときに ボタンやリンクを押すなどしてAjaxActionを呼び出した際に、入力したデータに誤りが あった場合、従来はHTMLDataViewを再表示していましたが、4.0_005p1よりHTMLDataView を内包しているHTMLScrollPaneまたはHTMLSubDataViewAreaを再表示するよう変更 いたしました。 -------------------- Ver 4.0_004p1以前のバージョンからの移行 -------------------- [AW010167] ・ポップアップ表示時に絶対座標で表示座標を指定できるよう機能追加しました。 これに伴い、従来の下記のメソッドは今後使用しないようにしてください。 - setRelative() - setOffset() 旧バージョンとの互換を保つために、旧メソッドも存続していますが、 今後は、setPosition(int, int, int)メソッドを利用してください。 [CW010166] ・SmartDownloaderクラスを非推奨としました。 ファイルダウンロードを行う場合は、WebActionのメソッド内で HttpResponseからOutputStreamを取得し、ダウンロードデータを 直接出力するようにしてください。 詳細は、サンプル「みつもり毎度」のCustomerWebObjectクラスの doExportCsvActionを参照してください。 -------------------- Ver 4.0_004以前のバージョンからの移行 -------------------- [CW010148] ・AjaxAction利用時にHTTPヘッダに"Connection: close"を出力していましたが、これを 出力しないよう変更しました。 "Connection: close"を出力したい場合は、NJSystemPropertyのAJAX_CONNECTION_CLOSE プロパティにtrue値を設定してください。 Java起動時の設定例: java -Dcom.tenartni.ninjava.web.ajax_connection_close=true ... -------------------- Ver 4.0_003p1以前のバージョンからの移行 -------------------- 【重要:BC010137】・DSDBActionConnector利用時に、SmartDBActionのdoCustomProvide内でJDBCコネクションの AutoCommitプロパティがtrueになる障害を修正しました。 DSDBActionConnector利用時に、SmartDBActionのdoCustomProvide内でJDBCコネクションに 対しAutoCommitが行われることを期待していた場合は、次のように明示的にコミットを発行 する必要があります。 [変更前] sqlTable0.setActive(true); // この後、自動的にCommitが発行される。 sqlTable1.setActive(true); [変更後] sqlTable0.setActive(true); try { this.getJDBCAdaptor().getJDBCConnection().commit(); } catch (java.sql.SQLException se) { throw new DataException(se); } sqlTable1.setActive(true); -------------------- Ver 4.0_002p1以前のバージョンからの移行 -------------------- [BW010095] ・AjaxActionでのレスポンスに含まれるエラーメッセージのフォーマットを 変更しました。 [変更前] [任意のエラーメッセージ] (レスポンスの終了までを、エラーメッセージとする。) [変更後] [任意のエラーメッセージ] 上記のフォーマットを見つけた場合、エラーメッセージをアラートボックスで 表示します。 (互換性維持のため、変更前のフォーマットも残していますが、 なるべく変更後のフォーマットを使用してください。) [CC010118] ・JDBCAdaptorについて下記の変更を実施しました。 - getStringValidatorをgetDataFieldValidatorに変更。 (互換性維持のため、旧メソッドも存続) -------------------- Ver 4.0_001以前のバージョンからの移行 -------------------- [CC010063] ・DataTable.secureRow()の返り値をvoidからbooleanに変更しました。 (行の内容を確定したか否かを返すように変更しました。) もし、DataTableを継承してsecureRowメソッドをオーバーライドしていた場合 super.secureRow()の値を返すよう、変更する必要があります。 -------------------- Ver 4.0_000p1以前のバージョンからの移行 -------------------- [CW010039] ・AjaxAction.setRedirectURL()で外部のサーバへはリダイレクトできないよう仕様変更しました。 (セキュリティ向上のため) 外部のサーバへリダイレクトしたい場合は、HTMLファイルを中継してリダイレクトを行うなどの 対策を取ってください。 [CW010040] ・SmartWebObjectクラスのsetStyleSheets()で外部のサーバのスタイルシートを指定できないよう 仕様変更しました。(セキュリティ向上のため) 外部のサーバのスタイルシートを読み込みたい場合は、SmartWebObjectクラスのsetStyleSheets() メソッドを利用するのではなく、JSPに直接指定するようにしてください。 【重要:CW010045】・HTMLDataViewで最終ページを表示中にデータを削除して最終ページに表示するものが なくなった場合に、1つ前のページを表示するよう仕様変更しました。 (従来は、このような場合、最終行を1行のみ表示していました。) 【重要:CW010050】・行選択リンク、行選択ボタンを押した場合に、自動的にDataTableのフィルターを           外す処理を中止しました。           フィルターを外したい場合は、WebActionのReleaseFilterプロパティをtrueに設定してください。          ・WebActionのReleaseFilterプロパティを設定した場合、checkRequestを行うと必ずフィルターが           解除されるよう変更しました。           (従来は、現在行以外の入力データがある場合のみ、フィルターを解除していました。) -------------------- Ver 3.0_008p3以前のバージョンからの移行 -------------------- 【重要:AW010001】・Ajax対応用にHTMLField関連をリファクタリング(...と出力するよう変更)。 ・HTMLFieldに対してIdを自動的に生成するよう変更。 Idのフォーマットは SmartWebObjectのクラス名::Root:HTMLDataView名__HTMLField名となります。 (SmartDataViewを利用している場合は、 SmartWebObjectのクラス名::Root:SmartDataView名__HTMLDataView名__HTMLField名) HTMLFieldに対してIdを設定していた場合、それらは利用できなくなりました。 ※JavaScriptで、HTMLエレメントにアクセスする場合は、getSpanElement()関数および、 document.getElementByIdを利用するようにしてください。 変更前:getDataElement(...) 変更後:getSpanElement(...).firstChild (詳細はコンポーネントガイドの「WebAdaptorに含まれるファイル」の節を参照) [CW010002] WebDataAdaptorクラスのcheckRequestメソッドのI/Fを変更しました。          変更前:checkRequest(RequestHashMap, SmartWebObject.MessageTable) 変更後:checkRequest(RequestHashMap, SmartWebObject, boolean) 【重要:CW010006】JSPの
タグのname属性に、"form:"を接頭子につけるよう変更。 ※document.forms['dvBase']...のようなJavaScriptを記述していた場合 document.forms['form:Root:dvBase']...に変更してください。 【重要:CW010010】ninjava-header.xspをリファクタリングしました。 以下のJavaScript関数を廃止または変更しているので、使用していた場合は修正が必要となります。 ・以下のJavaScript関数を廃止 - ninjavaCheckElement() - scroll_hor() - scroll_ver() - set_scroll() - getFormName() (代わりにgetFormElement()が追加されています。) - ninjavaSetFocus() ・以下のJavaScript関数名を変更 - doNinjavaShowMessage() → Swo.showNinjavaMessage() - doNinjavaSetFocus() → Swo.setFocus() ・以下のJavaScript関数のI/Fが変更 - getElementByName()の第一引数がformNameからformTagに変更 - getElementIndex()の第一引数がformNameからformTagに変更 【重要:CW010011】SmartWebObjectのvalidationOrderプロパティを廃止しました。 Ver 4.0_000では宣言順にチェックされます。(タブインデックス順にチェックすることはできません。) 【重要:CW010012】・タグのname属性のフォーマットを次のように変更しました。 変更前:tl_Data名_DataField名_RowIndex:InternalRecordId 変更後:tl_SmartWebObjectクラス名_Data名_DataField名_RowIndex:InternalRecordId [CC010014] DataFieldExceptionのコンストラクタのI/Fを変更しました。 変更前:DataFieldException(Throwable, String, String, Object[], String, String) { 変更後:DataFieldException(Throwable, String, String, Object[], DataField, String) { 【重要:CW010017】SmartWebObjectをインスタンス化した後に、firstInitializeメソッドを呼び出すよう仕様変更しました。 インスタンス化後に一度だけ行いたい初期化処理はfirstInitializeメソッド内で行うようにしてください。 [CC010019] VersionInfo.NINJAVA_VERSION_NOフィールドの可視属性をpublicからprivateに変更しました。 バージョンを取得したい場合は、VersionInfo.getVersionNo()を使用してください。 [CW010023] HTMLErrorMessageのディフォルトStyleをピンク・太文字に変更しました。 黒の通常文字にしたい場合などは、HTMLErrorMessageのStyleを設定してください。 [CW010024] HTMLFreeCodeにOutputStyleプロパティを追加し、このプロパティがtrueの場合は、...で 囲むよう変更しました。falseの場合には、...で囲みません。 HTMLFreeCodeを利用していた場合で、...で囲みたい場合は、OutputStyleにtrueを 設定するようにしてください。 【重要:BC010026】・DataTableでdeleteRow()を行ったときに、削除処理中にDONE_DELETEが呼ばれる 障害を修正。(削除処理完了後に呼ばれるよう修正した。) ※従来のように削除処理中のイベントを捕捉したい場合には、DONE_DELETEではなくROW_DELETING イベントを捕捉してください。 【重要:CW010027】HTMLDataViewのSubmitAttributeのディフォルト値をnullから "style=\"margin-top:0;margin-bottom:0;\""に変更。 ポップアップウィンドウ内に表示した際に、余計な空行が出力されるのを防ぐため。 ※...
で空行が出力することを期待して作成した画面では表示が ずれる恐れがあります。その場合には、SubmitAttributeに "style=\"margin-top:10;margin-bottom:10;\""のような値を設定してください。 【重要:CC010029】DataFieldの正規表現のパターンマッチングに使用するエンジンをJakarta OROから JDKのjava.util.regexパッケージに変更しました。 今後は、DataFieldに設定する正規表現は、JDKのjava.util.regexパッケージ用のものを 使用してください。 ※Ver 3.0からの移行用にシステムプロパティREMOVE_REGEXP_HEAD_TAILを追加したので、 Ver 3.0でJakarta ORO用の正規表現を大量に設定している場合には、システムプロパティの 設定による回避も検討してください。 【重要:AW010033】WebActionのcheckRequest()時のディフォルトの動作として、DataTableに対するフィルターを 解除しないように変更しました。 TableRelationやFilterを利用している場合などでcheckRequest()時にDataTableのフィルターを 解除したい場合には、WebActionのReleaseFilterプロパティにtrueを設定してください。 ※Ver 3.0からの移行用にシステムプロパティRELEASE_FILTER_AT_CHECK_REQUESTを追加したので Ver 3.0でフィルターが解除されることを期待している箇所が大量にある場合には、システム プロパティの設定による回避も検討してください。 -------------------- Ver 3.0_008p1以前のバージョンからの移行 -------------------- [BW000397] HTMLDataViewのDefaultDataに件数0のDataTableを設定した場合に、絶対座標指定の HTMLDataViewが出力されなくなる障害を修正しました。 ※従来と同じように、絶対座標指定のHTMLDataViewでDafaultDataである DataTableが0件の場合に表示させたくない場合は、HTMLDataViewの VisibleConditionに [dataTable.count()] > 0 を設定してください。   ※今回の修正で、DefaultDataがDataMapまたは未設定の場合に setCurrentStartRow()を行うと、 currentStartRow = -1 currentEndRow = -1 となるよう変更されました。 強制的にcurrentStartRowの値を変更するには、 setCurrentStartRow(5, false, true);のようにしてください。 -------------------- Ver 3.0_008以前のバージョンからの移行 -------------------- 【重要:CW000386】HTMLDataView, HTMLFieldに対してリファクタリングを実施しました。 ・HTMLDataView,HTMLDataView.Row,HTMLDataView.Cellに対して下記の変更を実施。 - StyleIdプロパティをIdプロパティに変更。 (従来のHTMLDataView.Idプロパティは廃止) - Styleプロパティを追加 - BgColorプロパティをStyleに統合。 ・HTMLDataView.RowのAlign,ValignプロパティをStyleに統合 ・HTMLDataView.CellのAlign,Valign,NowrapプロパティをStyleに統合 ・IHTMLStyleSheetのパッケージを com.tenartni.ninjava.web.filed から com.tenartni.ninjava.web に移動 ・HTMLField継承クラスからStyleIdプロパティを削除し、HTMLFieldにIdプロパティを追加。 ・HTMLLabelで表示するラベルがnullまたは空文字の場合に、スタイル等が出力される障害を修正。 ・HTMLLabel,HTMLExpression,HTMLRecordNumberは常に...を  出力するよう変更。 ・入力系のHTMLFieldもReadOnly=trueの場合、...を出力するよう変更。 ・HTMLLabel,HTMLExpression,HTMLRecordNumber,HTMLImageにLinkId,LinkStyleClass  LinkStyleプロパティを追加し、それらはタグ内のid,class,styleとして出力する  よう変更 ・HTMLImageのBorder,Alignプロパティを廃止(Styleに統合) ・HTMLErrorMessageの表現方法を変更 下記のように変更してください。 変更前:HTMLField.setStyleId("xxx"); 変更後:HTMLField.setId("xxx"); 変更前:HTMLDataView.Cell.setBgColor("red"); 変更後:HTMLDataView.Cell.putStyle("background-color", "red"); 変更前:HTMLDataView.Cell.setAlign("center"); 変更後:HTMLDataView.Cell.putStyle("text-align", "center"); 変更前:HTMLDataView.Cell.setValign("top"); 変更後:HTMLDataView.Cell.putStyle("vertical-align", "top"); 変更前:HTMLDataView.Cell.setNowrap(true); 変更後:HTMLDataView.Cell.putStyle("white-space", "nowrap"); -------------------- Ver 3.0_007p6以前のバージョンからの移行 -------------------- 【重要:CW000367】HTMLのSPANタグおよびDIVタグ終了時に\nを出力しないよう変更しました。 これにより、SPANタグおよびDIVタグ終了時に空白が表示されることを期待して デザインしていた画面は、空白の分が詰まって表示されるようになるので、 適宜空白などを追加するようにしてください。 【重要:CC000380】NJObject.setName()関連をリファクタリングいたしました。 ・NJObjectに検証用オブジェクトを指定して名前をつけるsetNameメソッドを追加。 ・NJAdaptor.renameNote()でDataExceptionをスロー可能にした。 ・NJObject.NJObjectNameValidatorインターフェースおよびその実装クラスを追加。 ・DataUtilクラスからINVALID_NAME_CHARSフィールドおよびcheckNameメソッド を削除。(NJObjectクラスへ移動) ・Data,HTMLDataViewの名前に使用できない文字を追加(!#%~^?|{}) ・HTMLDataView.setName(String)で名前が不正な場合、DataException をスローするよう変更。 →これにより、HTMLDataViewContainer.renameHTMLDataViewも DataExceptionをスローするよう変更。 これにより、従来は例外がスローされなかったsetName()メソッドで、DataExceptionが スローされる可能性があります。catch節を記述するなどの処理を行ってください。 -------------------- Ver 3.0_006p2/3.0_006p3/3.0_007からの移行 -------------------- 【重要:AW000361】WebActionにCheckSequenceプロパティを追加しました。 これによりWebAction毎に送信リクエストの順序チェックを行う/行わないを指定可能になりました。 送信されたリクエストの順序チェックを行いたい場合は、 SmartWebObjectのCheckSequenceプロパティ および WebActionのCheckSequenceプロパティ をtrueにしてください。(いずれかがfalseの場合は順序チェックを行いません。) ただし、WebActionが指定されていない場合は、SmartWebObjectのCheckSequenceプロパティを trueにしてください。 3.0-006p2でSmartWebObject#setStopResponse(boolean)メソッドが追加されましたが、 WebActionで呼ばれたメソッド内でSmartWebObject#setStopResponse(true); を呼び出していた場合、WebActionのCheckSequenceプロパティをfalseに設定するように してください。変更しないとシーケンスエラーとなる場合があります。 -------------------- Ver 3.0_006p3以前のバージョンからの移行 -------------------- 【重要:AC000334】DataTable.isNull(int rowIndex, String columnName)メソッドおよび DataTanle.isNull(int rowIndex, int columnIndex)メソッドを追加しました。 これに伴い、計算式で[table.column]の値がnullだった場合に、 従来は""を返していましたが、今回からnullを返すよう変更されました。 計算式で、nullの項目で""が返されるのを期待している場合には、変更が必要です。 例) 変更前 [dataTable.column] 変更後 IF(ISNULL([dataTable.column]),"",[dataTable.column]) あるいは IF([dataTable.column] == "", "", [dataTable.column]) ※[CC000304]により(null == "")はtrueを返すようになりました。 【重要:AW000350】WebActionにRoleプロパティを追加しました。 (WebActionを実行可能なRoleを設定できるよう機能追加) WebObjectContainerにhasRoleメソッドを追加しました。 この変更に伴い、SmartWebObjectのisUserInRoles(HttpServletRequest)メソッドが 非推奨となりました。 従来はHttpSessionを利用する場合は、HttpServletRequestのRoleを 参照していましたが、今回からWebObjectContainerに設定されたRoleで 権限があるかないかを判定するように変更されました。 HttpSessionを利用して、かつ、RoleによるSmartWebObjectの権限制御を利用していた場合、 認証後の処理などで WebObjectContainer#setRoles(String[]) を行って、WebObjectContainerのRolesプロパティを設定するように 変更してください。 【重要:AX000353】com.tenartni.ninjavax.webパッケージを新規作成しました。 これらは従来のcom.tenartni.ninjava.sql.httpパッケージに変わるものです。 (従来のcom.tenartni.ninjava.sql.httpパッケージのものよりも大幅に機能強化されています。) この新規パッケージ追加にともない、従来のcom.tenartni.ninjava.sql.httpパッケージは 廃止されています。 今後は、com.tenartni.ninjavax.webパッケージを使用してください。 com.tenartni.ninjavax.webパッケージはMicrosoft .NETと連携して動作させる場合などに 利用します。詳しくは「Win2Jawsプログラミングガイドの巻」を参照してください。 【重要:AW000356】複数のDBActionConnector利用に正式に対応しました。 1つのWebアプリケーションから複数のデータベースに接続できるように なりました。 これに伴い、DBActionConnector関連のプロパティの指定方法を変更しました。 ・従来はweb.xmlにDBActionConnector関連のプロパティを指定していましたが、 今後は別のXMLファイルにてプロパティを指定し、web.xmlにはその XMLファイルの場所を指定するようにしました。 ・DBActionConnectorを複数利用する場合に、従来はweb.xmlに指定されて いたものをデフォルトとして利用していましたが(web.xmlにない場合は、別XML ファイルで先頭に定義されていたDBActionConnectorがディフォルト) 今後はディフォルトとするDBActionConnectorの名前を指定するよう変更しました。 詳細はnew_function_fw.txtの【重要:AW000356】の項を参照してください。 【重要:CC000338】Base64のencode/decodeをJakarta CommonsCodecを利用して行うよう変更しました。 (com.tenartni.ninjava.utilパッケージのBase64Encoder,Base64Decoderクラスを 削除しました。) Base64Encoder,Base64Decoderクラスを使用していた場合、Jakarta CommonsCodec を利用するよう変更してください。 【重要:CW000346】SmartServletをリファクタリング(Win2Jaws対応)。 ・下記のメソッドにRequestHashMapの引数を追加しました。 (互換性維持のため、旧メソッドも存続) - printContainerExceededMaximum - printExecuteContainerExceededMaximum - printExecuteContainerTimemout ・下記のメソッドにRequestHashMapおよびSmartWebObjectの引数を追加しました。 (互換性維持のため、旧メソッドも存続) - handleException ・下記のメソッドにRequestHashMapおよびStringの引数を追加しました。 (旧メソッドは存続させない) - printInitialWebObject 上記のメソッドを利用していた場合、下記のように修正してください。 変更前:protected void printContainerExceededMaximum( HttpServletRequest request, HttpServletResponse response); protected void printExecuteContainerExceededMaximum( HttpServletRequest request, HttpServletResponse response); protected void printExecuteContainerTimemout( HttpServletRequest request, HttpServletResponse response); protected void handleException( HttpServletRequest request, HttpServletResponse response, Exception e) throws ServletException; protected synchronized void printInitialWebObject( HttpServletRequest request, HttpServletResponse response) throws Exception; 変更後:protected void printContainerExceededMaximum( HttpServletRequest request, HttpServletResponse response, RequestHashMap requestHashMap); protected void printExecuteContainerExceededMaximum( HttpServletRequest request, HttpServletResponse response, RequestHashMap requestHashMap); protected void printExecuteContainerTimemout( HttpServletRequest request, HttpServletResponse response, RequestHashMap requestHashMap); protected void handleException( HttpServletRequest request, HttpServletResponse response, Exception e, RequestHashMap requestHashMap, SmartWebObject swo) throws ServletException; protected synchronized void printInitialWebObject( HttpServletRequest request, HttpServletResponse response, RequestHashMap requestHashMap, String initialWebObjectName) throws Exception; 【重要:CW000362】・WebActionを実行するメソッドのI/Fを変更しました。 ・RequestHashMap.getSubmitValue(String)メソッドの名前をgetParameter(String)に変更しました。 従来はWebActionのMethodプロパティで指定されたメソッドは public doMyMethod(HttpServletRequest request, HttpServletResponse response, RequestHashMap requestHashMap) throws Exception; のI/Fを持つメソッドを呼び出していましたが、3.0-007からは public doMyMethod(HttpServletRequest request, HttpServletResponse response, WebAction action) throws Exception; のI/Fを持つメソッドを呼び出すよう変更になりました。 Webクライアントから送信されたパラメタの値を参照したい場合は、WebAction#getParameter(String)や WebAction#getParameterObject(String)などを利用してください。 ※旧バージョンとの互換性を維持するために、旧I/Fを持つメソッドも利用可能ですが、  今後はできるだけ新しいI/Fのメソッドを利用するようにしてください。  今後の新機能は新しいI/Fのメソッドについてのみ提供する予定です。 【重要:CW000364】WebActionが見つからなかった場合の振る舞いを変更しました。 従来は_SUBで指定されたWebActionが見つからなかった場合はログファイルにWARNレベルでWebActionが 見つからなかった旨のメッセージを出力し、SmartWebObjectのdoExecuteメソッドを呼び出していました。 3.0-007からはWebActionが見つからなかった場合はDataExceptionをスローするようにしました。 WebActionが見つからない場合にdoExecuteメソッドが呼ばれることを期待して作成したWebアプリケー ションは影響があります。WebActionを追加して、見つからないことがないようにしてください。 【重要:BW000343】SmartWebObjectでOutputTypeにOTHER,FILE_DOWNLOADを選択し、 response.getWriter()を呼び出した場合に、SmartServlet内で 「java.lang.IllegalStateException: getWriter()はこのレスポンスに対して既に呼び出されています」 というような例外が発生する障害を修正しました。 この修正の伴い、SmartWebObject側でServletResponseに出力 を行った際、必ずOutputStreamあるいはWriterに対してflush() を呼ぶ必要があります。 例1 public void doExportCsvAction(HttpServletRequest request, HttpServletResponse response, RequestHashMap requestParamMap) throws Exception { response.setContentType("text/csv;charset=Windows-31J"); response.setHeader("Content-Disposition", "filename=" + exportCsvFilename); OutputStream outputStream = response.getOutputStream(); outputStream.write(txtCsv.exportTextString().getBytes("Windows-31J")); outputStream.flush(); // これが必要となります。 } 例2 public void printDownloadData(HttpServletRequest request, HttpServletResponse response) { try { setContentDispositionHeader(response); Writer writer = response.getWriter(); writer.write(txtCsv.exportTextString()); writer.flush(); // これが必要となります。 } catch (Exception x) { x.printStackTrace(); } finally { // このSmartWebObjectインスタンスをWebObjectContainerから削除する。 this.getContainer().removeSmartWebObject(this.getName()); } } -------------------- Ver 3.0_005以前のバージョンからの移行 -------------------- 【重要:AW000288】HTMLScrollPaneを新規追加し、HTMLDataViewにスクロールバーを付けて 表示することが可能になりました。このため、WEB-INF/フォルダの下の ninjava-header.xsp および ninjava-webobject.tld ファイルが変更されています。 3.0_005以前のバージョンのシステムに 3.0_006以降のnjcore.jar, njweb.jarを適用 する場合、WEB-INF/フォルダの下の ninjava-header.xsp および ninjava-webobject.tld ファイルも置き換える必要があります。 また、この機能追加にともない、HTMLDataViewのwriteHTMLTableメソッドの I/Fが変更されています。 変更前: (Writer writer, String submitFormName, boolean calledBySubDataViewArea) 変更後: (Writer writer, String submitFormName, HTMLSubDataViewArea subDataViewArea) [AW000287] HTMLDataView.CellにRowSpanDataFieldsプロパティを追加しました。 上記に対応するため、HTMLDataView.RowクラスのwriteHTMLTableRowメソッドおよび HTMLDataView.CellクラスのwriteHTMLTableCellメソッドのI/Fが変更されています。 【重要:CC000282】SmartDBActionのProvide,Resolve対象としてSQLTable以外のDataTableも 使用可としました。 上記に対応するため、メッセージのフィールド名が変更されています。 変更前: SQLTABLE_FOR_DB_ACTION_TABLE_NOT_FOUND 変更後: DATATABLE_FOR_DB_ACTION_TABLE_NOT_FOUND [CC000285] 行選択リンクまたは行選択ボタンが押されたときに、DataTableの releaseFilter()を呼んでから、行移動するよう変更されています。 (フィルターがかかっていて選択された行が非表示になっている可能性があるため。) 行選択リンク、行選択ボタンを押したときにフィルターをかけた状態が続く ことを想定していたプログラムは正常に動作しなくなるおそれがあります。 フィルターを再度かけるなどして対応する必要があります。 -------------------- Ver 3.0_004以前のバージョンからの移行 -------------------- 【重要:AC000249】エラーメッセージやHTMLLabelなどのリソース文字列を、ロケールに応じて 表示するようになりました。このため、WEB-INF/ninjava-header.xspが 変更されています。 3.0_004以前のバージョンのシステムに 3.0_005以降のnjcore.jar, njweb.jarを適用 する場合、WEB-INF/ninjava-header.xsp も置き換える必要があります。 また、この機能追加にともない、メッセージ定義ファイルが 変更になりました。 変更前: com/tenartni/ninjava/data/MessageResource_ja.properties MessageResource_en.properties 変更後: com/tenartni/ninjava/data/Msg_ja.properties Msg_en.properties メッセージをカスタマイズしていた場合、Msg_ja.properties, Msg_en.properties に変更点を反映させる必要があります。 【重要:CC000247】DataContainerのXML出力/入力に関して大幅変更。 I/Fが変更されていますので、DataContainerのexportXML, importXMLメソッドを 使用していた場合は、新しいメソッドを呼ぶよう変更してください。 【重要:CC000248】com.tenartni.ninajva.sql.httpパッケージを全面リファクタリング。 下記のプロパティは従来はHttpDBActionConnectorに対して設定していましたが、 今後はHttpDBActionServletに対して設定してください。(web.xmlにて定義) ・http_db_action_login_required ・http_db_action_login_dbactionclass ・http_db_action_secret_key ・http_db_action_md_algorithm 【重要:CC000264】SmartDBActionクラスのdoCustomeExecuteメソッドのI/Fが変更になりました。 変更前: protected ValueCache doCustomExecute(int i, ValueCache valueCache) throws DataException; 変更後: protected ValueCache[] doCustomExecute(ValueCache[] valueCaches) throws DataException; 互換性維持のため、変更前のメソッドも存続していますが、今後は変更後のメソッドを使用 するようにしてください。 -------------------- Ver 3.0_003以前のバージョンからの移行 -------------------- 【重要:CC000237】TextTableのSortFieldsプロパティが設定されていた場合、 ソートを行った後にCSVまたは固定長ファイルへ出力するよう 変更しました。 CSVまたは固定長ファイル出力後もソートされた状態になる点に 注意してください。 -------------------- Ver 3.0_002以前のバージョンからの移行 -------------------- 【重要:CW000229】getDefaultJspCallpageFormでJSPを表示する場合は、シーケンス番号を カウントアップしないよう変更しました。 JSPに のようにしてJSPを表示した場合、従来は戻るボタン対策のための シーケンス番号を1つカウントアップしていましたが、これをカウント アップしないよう変更しました。 カウントアップしたい場合は、JSPを直接表示するのではなく、 JSPを表示するためのSmartWebObjectを作成してSmartWebObjectを 表示するようにしてください。 -------------------- Ver 3.0_000以前からの移行 -------------------- 【重要:CC000226】 ValueCacheにSortFields,SortOrdersを含まないよう仕様変更しました。          ValueCacheを通じてDataTableのコピーを行う場合、SortFields,          SortOrdersはコピーされなくなりました。          SortFields, SortOrders をコピーしたい場合は別途コピーを          行う処理を実装してください。      移行前 DataTable orgTable = new SimpleTable();          orgTable.setSortFields(new String[]{"COL0", "COL1"});          ...          DataTable newTable = new SimpleTable();          newTable.setValueCache(orgTable.getValueCache());      移行後 DataTable orgTable = new SimpleTable();          orgTable.setSortFields(new String[]{"COL0", "COL1"});          ...          DataTable newTable = new SimpleTable();          newTable.setValueCache(orgTable.getValueCache());          newTable.setSortFields((String[])orgTable.getSortFields().clone());