ページ フローのアップグレード

このトピックでは、ページ フローに関するアップグレードでの変更の詳細について説明します。

バージョン 8.1 からアップグレードされるアプリケーションに対して行われる変更の詳細なリストについては、「WebLogic Workshop 8.1 からバージョン 10.x へのアップグレード時における変更点」を参照してください。

バージョン 8.1 の NetUI JSP タグからのアップグレード時の変更点

アップグレード ツールを使用してアップグレードを実行する場合、バージョン 8.1 の NetUI JSP タグをバージョン 10.x の NetUI JSP タグに置き換えるかどうかを選択できます。バージョン 10.x の NetUI JSP タグは、バージョン 8.1 のタグと比べて機能が強化されています (NetUI タグは、Workshop バージョン 10.x の新しい Web プロジェクトではデフォルトです)。デフォルトの動作では、バージョン 8.1 のタグは現在の NetUI タグに置き換えられません。代わりにデフォルトでは、バージョン 8.1 のタグはバージョン 8.1 のタグのまま、バージョン 10.x のサーバと互換性のあるバージョンにアップグレードされます。

注意 : JSP ページでは、互換性のあるバージョン 8.1 のタグと 10.x のタグを組み合わせて使用することができます。ただし、このような併用がサポートされるのは、アップグレードの結果、一部のバージョン 8.1 のタグに対応する 10.x タグがないことが原因でタグが併用される場合のみです。

タグに関する決定を行うことで、アプリケーションの JSP 部分にさまざまな影響が出ます。選択の前に、以下のことを考慮してください。

アップグレード時にタグが変更される

アプリケーションのアップグレード時にバージョン 8.1 のタグを 10.x のタグに置き換えることを選択すると、バージョン 8.1 のタグの大部分は、簡単に特定できる、対応する 10.x のタグに置き換えられます。こうした対応予測には、次の表に示すような例外があります。

バージョン 8.1 のタグ バージョン 10.x のタグ
tree なし (非推奨)
grid なし (非推奨)
label span
choice なし (非推奨)
choiceMethod なし (非推奨)
repeater repeater
content なし (非推奨)
callControl なし (非推奨)
declareControl なし (非推奨)
visible なし (非推奨)
getNetuiTagName なし (非推奨)
anchor anchor
(forward 属性が設定されている場合は移行されない)
imageAnchor imageAnchor
(forward 属性が設定されている場合は移行されない)

アップグレード時に属性が変更される

JSP タグの属性の中には、アップグレード時に新しい属性に移行されたり、単純に削除されたりするものがあります。次の表に、予測される変更を示します。

バージョン 8.1 のタグ 属性 アクション
anchor
id
tagId 属性が存在している場合は削除される。それ以外の場合は tagId に移行される。
anchor forward
この属性が存在している場合、タグは移行されない。
anchor page
href 属性が存在している場合は削除される。それ以外の場合は最初の「/」を削除して href に移行される。
bindingUpdateErrors id 削除される。
checkBoxGroup
tagId
削除される。
form id tagId 属性が存在している場合は削除される。それ以外の場合は tagId に移行される。
form
tabindex
削除される。
form name
beanName に変更される。
form type
beanType に変更される。
form scope
beanScope に変更される。
image
lowsrc
削除される。image タグの子として netui:attribute タグが追加される。次に例を示す。
</netui:image>   
    <netui:attribute name="lowsrc" value="blurryFoo.gif"/>
</netui:image>
image
page
src 属性が存在している場合は削除される。それ以外の場合は最初の「/」を削除して src に移行される。
image
id
tagId 属性が存在している場合は削除される。それ以外の場合は tagId に移行される。
imageAnchor
lowsrc
image タグの子として lowsrc 属性と netui:attribute タグが追加される。次に例を示す。
</netui:imageAnchor>
    <netui:attribute name="lowsrc" value="blurryFoo.gif"/>
</netui:imageAnchor>
imageAnchor scope
削除される。
imageAnchor forward
この属性が存在している場合、タグは移行されない。
imageAnchor page
href 属性が存在している場合は削除される。それ以外の場合は最初の「/」を削除して href に移行される。
imageButton
align
削除される。
imageButton height
削除される。
imageButton width
削除される。
imageButton hspace
削除される。
imageButton vspace
削除される。
imageButton id
tagId 属性が存在している場合は削除される。それ以外の場合は tagId に移行される。
imageButton page
src 属性が存在している場合は削除される。それ以外の場合は src に移行される。
label
dataFormatas
削除される。
label
id
tagId 属性が存在している場合は削除される。それ以外の場合は tagId に移行される。
label tabIndex 削除される。
radioButtonGroup tagId
select onSelect 削除される。
select nullableTop 削除される。
selectOption
id
tagId 属性が存在している場合は削除される。それ以外の場合は tagId に移行される。
selectOption
tabIndex
削除される。
scriptContainer
scopeId
idScope に変更される。
html
scopeId
idScope に変更される。
error
value
key に変更される。
error
bundle
名前が「bundleName」に移行される。
errors
bundle
名前が「bundleName」に移行される。
template:section visibility visibility 属性が存在しており、その属性に値がある場合、その値は visible 属性に移行される。それ以外の visibility 属性が存在していない場合は、visible 属性が移行される。

アップグレードによるデフォルト式言語の下位互換性のあるバージョンへの設定

アプリケーションのアップグレード時には、バージョン 8.1 の NetUI JSP タグをアップグレードするかどうかの確認を求められます。アップグレードを選択するかどうかに関係なく、アップグレードされたアプリケーションのデフォルトの式言語は、新しいアプリケーションで使用されるバージョンではなく下位互換性のあるバージョンになります。その理由は、下位互換性のあるバージョンには寛容性があり、完全にアップグレードする準備ができるまで既存のコードを使用できるからです。現在の JSP タグ技術への完全なアップグレードを選択した場合には、デフォルトの式言語を現在のタグがサポートされているバージョンに変更する必要があります。

ページに JSP タグを追加すると、バージョン 10.x の式言語が使用されます。そのときまでは、引き続き下位互換性のある式言語をデフォルトとして使用する必要があります。詳細については、「JSP タグで使用されるデフォルトの式言語の変更」を参照してください。

注意 : 一般的には、バージョン 8.1 の NetUI タグは非推奨であると考えてください。新しいコードではバージョン 10.x の NetUI JSP タグを使用しなければなりません。

JSP タグで使用されるデフォルトの式言語の変更

現在の JSP タグを使用するように JSP ページを完全にアップグレードした場合は、デフォルトの式言語を下位互換性のあるバージョンからバージョン 10.x に変更する必要があります。

注意 : この変更を行う前に、コードの変更が必要になる場合があることに注意してください。

プロジェクトの beehive-netui-config.xml ファイルを編集することで、デフォルトの式言語を変更できます。このファイルは、次のようなパスに配置されています。

WORKSPACE_HOME\PROJECT_HOME\web\WEB-INF\beehive-netui-config.xml

デフォルトの言語として指定できる設定には、netuiel (JSP 2.0 式言語) および compat-netuiel (バージョン 8.1 の NetUI 式言語) があります。デフォルトを JSP 2.0 式言語に変更するには、次の記述を含むようにファイルを変更します。

<expression-languages>
    <default-language>netuiel</default-language>
    ....
</expression-languages>

バージョン 10.x の NetUI JSP タグで式言語をサポートするためのコードの変更

バージョン 8.1 の NetUI JSP タグを 10.x の NetUI JSP タグにアップグレードすることを選択した場合には、現在のタグで使用される式言語をサポートするように JSP コードで式を変更する必要があります。以下では、アップグレード時にツールによって行われる変更と、場合に応じて非 JSP コードに対して自ら行う必要のある変更について説明します。

アップグレード時に式が変更される

以下の変更は、アップグレード時に式に対して行われます。

パブリック データ メンバーにバインドするには変更が必要になる

バージョン 8.1 の NetUI JSP タグをバージョン 10.x の NetUI JSP タグにアップグレードする場合には、パブリック メンバーによって保持されるデータをバインディング タグにエクスポーズする方法の変更が必要になる場合があります。バージョン 8.1 ではパブリック フィールドへの式コードのバインディングがサポートされていましたが、バージョン 10.x では式はパブリック アクセサにしかバインドできません。

つまり、アップグレード ツールでは JSP タグで使用される式言語構文はアップグレードされますが、クラスへのアクセサが必要となる場所にアクセサを追加する処理は行われません。現在の JSP タグに完全にアップグレードするには、パブリック フィールドが使用されていた場所に get* アクセサおよび set* アクセサを手動で追加する必要があります。

予約語は識別子として使用できない

JSP 2.0 式言語では以下の予約語が使用されます。コードではこれらの予約語を識別子として使用しないでください。

and    eq    gt    true    instanceof

or    ne    le    false    empty

not    lt     ge     null     div     mod

式言語コードにプロパティをエクスポーズするように設計されたアクセサの名前に予約語を含めることで、その予約語を使用できます。たとえば、次のコードは empty プロパティをエクスポーズするように設計されたものです。

public String empty;
public String getEmpty() {return empty;}

JSP ページでは、当然ながら、予約語である「empty」をプロパティ名として使用することになります。

<netui:content value=?${pageFlow.empty}? defaultValue=?NO VALUE?/>

代わりに、「getEmptyVal」など結果としてメソッド名になる命名方式を使用して、pageFlow.emptyVal を使用してそれらにバインドします。

式言語の詳細については、J2EE 1.4 チュートリアルにある「Expression Language」を参照してください。

デフォルト コンストラクタが必要なフォーム クラス

バージョン 8.1 とは異なり、バージョン 10.x では、ページ フローで使用されるフォーム (現在は非推奨になっている FormData クラスを拡張したものなど) にはデフォルト コンストラクタが含まれていなければならないという要件があります。

コードのアップグレード後にデフォルト コンストラクタを追加することで、この変更に対応できます。

アップグレードされた XQuery 実装をサポートするための XQuery の使用の更新

バージョン 8.1 の XMLBeans では XQuery 草案 16 が使用されていましたが、バージョン 10.x では草案 23 が使用されています。アップグレード ツールでは通常、XQuery 式を実行する XMLBeans コードは更新されますが、JSP ファイル内のコードは更新されません。旧バージョンの実装に基づいて機能するコードに対して、必要な変更を手動で行う必要があります。

詳細については、「アップグレードされた XQuery 実装をサポートするための XQuery の使用の更新」を参照してください。

JSP ファイル メソッドおよび JSP コードでアップグレードされないパッケージ名の修正

ページ フロー Controller ファイルでは、型のインポートの外側で型名が完全修飾されている場合、その型のパッケージはバージョン 10.x で使用されるパッケージにアップグレードされません。たとえば次のアップグレード後のコードでは、Forward のパッケージは com.bea.wlw.netui.pageflow から org.apache.beehive.netui.pageflow にアップグレードされていません。

/**
 * @jpf:action
 * @jpf:forward name="begin" path="Begin.jsp"
 */
@Jpf.Action(forwards = {
    @Jpf.Forward(name = "begin",
                 path = "Begin.jsp")
})
public Forward begin()
{
    return new com.bea.wlw.netui.pageflow.Forward("begin");
}

エラーはソース コードで強調表示されます。Workshop のクイック フィックス機能を使用して、型を同一名の正しい型に置き換えることで修正できます。検索と置き換えを行って修正することもできます。

NetUI タグを拡張したカスタム タグはサポートされない

バージョン 8.1 で NetUI タグを拡張してカスタム JSP タグを作成した場合、それらのタグは Workshop ツールではアップグレードされません。NetUI タグの拡張はサポートされていませんでした。NetUI タグを現在のタグに移行しないことを選択した場合には、それらのタグはアプリケーション内でビルドされますが、想定どおりに機能しないおそれがあります。

同様に、バージョン 10.x での JSP タグの拡張もサポートされていません。

状態トラッキング API での変更を反映するためのコードの更新

バージョン 10.x では、特定の状況で null ではなく IllegalStateException を返すように NetUI API のいくつかのメソッドが変更されています。これは、要求されている戻り値が実際に null なのか、トラッキングされていないために単に不明なのかに関係なく null が返されていたバージョン 8.1 に対する改良です。

true を返すように alwaysTrackPreviousAction メソッドをページ フロー コントローラでオーバーライドすることで、IllegalStateException の処理を回避できます。ただし、これによりアプリケーションのパフォーマンスが低下するおそれがあります。次に例を示します。

protected boolean alwaysTrackPreviousAction()
{
    return true;
}

変更されているメソッドは次のとおりです。

以下に、変更に関係する詳細な状況を示します。

ページ フローで使用されるコールバック対応コントロールの置き換え

バージョン 10.x では、ページ フロー内のカスタム コントロールで外部コールバックを受信できません。バージョン 8.1 では、カスタム コントロール内にネストされているコントロール (サービス コントロールなど) からのコールバックを、そのカスタム コントロールで受信するコードを記述できました。カスタム コントロールからポーリング インタフェースをエクスポーズすることで、ページ フロー コードでコールバックから受信した応答を取得できました。この機能はバージョン 10.x ではサポートされていません。

アップグレードされたコード内でカスタム コントロールを Web サービスに置き換えることで、この機能の代わりとすることができます。バージョン 8.1 の該当する機能と、バージョン 10.x において考えられる回避策の詳細については、「ページ フローでコントロール コールバックをサポートする方法」を参照してください。

JSP ページから使用されるコントロールのアセンブルの確認

バージョン 10.x では、ランタイムで必要になるアーティファクトを生成するコンパイル時のアセンブル プロセスが、一部のコントロールで必要になっています。サービス コントロール、EJB コントロール、およびタイマー コントロールはこれに該当します。

このアセンブル プロセスは、これらのコントロールが Java ファイル内で参照されている場合にのみ、これらのコントロールに対してトリガされます (JSP ページからのみ参照されるコントロールは事実上除く)。アップグレードされたコードでは、コントロールを Java ファイルから参照することで、バージョン 8.1 からの変更に対応できます。

この参照に最適な場所はページ フロー コントローラ ファイルです (アプリケーションにコントローラがない場合には、アプリケーションとともにコンパイルされる別の Java ファイルに参照を追加できます)。参照するには、JSP ページで使用されているコントロール クラスを指定する org.apache.beehive.controls.api.bean.ControlReferences アノテーションを追加します。次に、1 つのコントロールを参照する例を示します。

@ControlReferences(value={mycontrols.MyServiceControl.class})
public class Controller extends PageFlowController {
    ...
}

Jpf.Forward と validationErrorForward との間で発生する名前の衝突の解決

バージョン 8.1 では、jpf:validation-error-forward アノテーションおよび jpf:forward アノテーションの name 属性に対して同じ名前を使用できました。バージョン 10.x では同じ名前は使用できなくなっています。 たとえば、次のようなバージョン 8.1 のコードを使用することができました。ここでは name 属性の値として「failure」が 2 回使用されています。

/**
 * @jpf:action
 * @jpf:forward name="success" return-action="addProfileDone"
 * @jpf:forward name="failure" path="addClient.jsp"
 * @jpf:validation-error-forward name="failure" return-to="currentPage"
 */
protected Forward addClientProfile(MaintainIndividualProfileForm form)
{
    ...
}

このコードに対応するアップグレードされたコード (Jpf.Forward アノテーションと Jpf.Action validationErrorForward 属性のコード) によって、バージョン 10.x ではビルド エラーが生成されます。 同じにならないように属性値の一方または両方を変更することで、この変更に対応できます。

ページ フローでの共存に対するアップグレードでの変更

バージョン 8.1 では、コントローラ ファイル (Controller.jpf) と JSP ファイルを同じディレクトリに配置できるプロジェクト階層がサポートされていました。これはバージョン 10.x ではサポートされていません。

たとえば、アップグレード時にページ フローに対して次のような階層の変更が発生します。

バージョン 8.1 :

webapp/
    Controller.jpf
    index.jsp

バージョン 10.x (アップグレード後)

webapp
    src
        Controller.java
    web
        index.jsp

バージョン 8.1 のスタイルは「共存」と呼ばれます。バージョン 10.x (アップグレードされたアプリケーションも含む) では、JAVA ソース ファイルと JSP は別のディレクトリに保持されます。myPageFlow という新しいページ フローを作成すると、myPageFlow という 2 つのディレクトリ (一方は JAVA ソース コード用、もう一方は JSP 用) が使用されます。次に、簡単な例を示します。

webapp
    src
        myPageFlow
            myPageFlowController.java
        Controller.java
    WebContent
        index.jsp
        myPageFlow
            index.jsp
            page1.jsp
            other JSPs

HTML 開始タグ内の変数に対する誤った IDE エラーの修正

バージョン 9.2 の IDE では、HTML 開始タグ内で変数宣言が行われるコードに対してエラーが誤って表示されます。実際には実行時にコードは有効です。たとえば、次のアンカー タグでは String 変数を使用している <%=s%> コードが IDE によって未解決として示されますが、実際には有効です。

<a href="<%!String s="test"; %><%=s%>">Test</a>

このエラーの誤表示は、<render:getJspUri>、<render:getSkinPath> などの、Java 変数を設定する WebLogic Portal のタグにも適用されます。

バージョン 8.1 からアップグレードされたコードでこの問題を回避するには、次のように変数宣言を開始タグの外側の行に移動します。

<%! String s="test"; %>
<a href="<%=s%>">Test</a>

com.bea.wlw.netui.util.XMLString のインポートおよび使用の非サポート (アップグレード不可)

この XMLString クラスは、バージョン 10.x には含まれていません (XMLBeans の org.apache.xmlbeans.XmlString と混同しないようにしてください)。アップグレードされたコードでこの型がインポートされていると、コンパイル エラーが生成されます。バージョン 8.1 ではこのクラスは、バージョン 10.x から削除された XScript 式言語とともに使用されていました。

Web アプリケーションをアップグレードすると、ページ フロー コントローラのソース フォルダがデフォルトの場所に戻ることがある

Beehive NetUI ファセットが含まれている一部のバージョン 9.2 Web プロジェクトでは、[関連ファイル モデル] の設定値が保持されない場合があります。特に、このようなプロジェクトに複数のソース フォルダが含まれ、[ページ フロー コントローラ] プロパティ パネルがデフォルト以外のソース フォルダに設定されている場合、プロジェクトをアップグレードすると、この値がデフォルトに戻ります。

Beehive NetUI ファセットと JSF ファセットの両方が含まれているプロジェクトでは、同じ状況が [プロジェクト|プロパティー|関連ファイル モデル|JSF バッキング ファイル] プロパティで発生する場合がある。

この値を変更するには、[プロジェクト|プロパティ|関連ファイル モデル|ページ フロー コントローラ] を選択し、目的のソース フォルダを選択します。

関連トピック

WebLogic Workshop 8.1 からバージョン 10.x へのアップグレード時における変更点


さらにヘルプが必要ですか。質問は Workshop ニュース グループまでお寄せください。