ページの先頭行へ戻る
 Formcoordinatorユーザーズガイド

C.1.2 クラス:OutputDataBuilder

電子フォームから雛形XMLデータを取得します。また、雛形を編集して作成した初期値用のXMLデータを使用して、Webブラウザに表示するHTMLデータを生成します。
当クラスのコンストラクタで電子フォーム格納パスを指定する場合、URIエンコードする必要があります。詳細については3.2.2.1 URIエンコードについてを参照してください。

注意

電子フォームの表示モードで「簡易表示モード」および「自動判別モード」は推奨されていません。「標準表示モード」または「汎用表示モード」を使用してください。

■ クラスの概要

クラス名

OutputDataBuilder

パッケージ名

com.fujitsu.form

文法

public class OutputDataBuilder

継承関係

java.lang.Object
   |
   +--- com.fujitsu.form.OutputDataBuilder

フィールドの概要

名称

説明

public static final int

DISPMODE_ENV

環境定義モードを表します。

public static final int

DISPMODE_STANDARD

標準表示モードを表します。

public static final int

DISPMODE_UNIVERSAL

汎用表示モードを表します。

public static final int

DISPMODE_SIMPLE

推奨されていません。簡易表示モードを表します。

public static final int

DISPMODE_AUTO

推奨されていません。自動判別モードを表します。

コンストラクタの概要

コンストラクタ名

説明

public
OutputDataBuilder(java.lang.String, java.lang.String, java.lang.String)

ユーザエージェント名、電子フォーム格納パス、および電子フォーム名を指定して、OutputDataBuilderオブジェクトを生成します。

public
OutputDataBuilder(java.lang.String, java.lang.String)

ユーザエージェント名と電子フォーム名を指定して、OutputDataBuilderオブジェクトを生成します。

public
OutputDataBuilder(javax.servlet.http.HttpServletRequest, java.lang.String, java.lang.String)

HttpServletRequestオブジェクト、電子フォーム格納パス、および電子フォーム名を指定して、OutputDataBuilderオブジェクトを生成します。

public
OutputDataBuilder(javax.servlet.http.HttpServletRequest, java.lang.String)

HttpServerRequestオブジェクトと電子フォーム名を指定して、OutputDataBuilderオブジェクトを生成します。

public
OutputDataBuilder(javax.servlet.http.HttpServletRequest, java.lang.String, java.lang.String, javax.servlet.ServletContext)

HttpServletRequestオブジェクトと電子フォーム格納パス、電子フォーム名、ServletContextオブジェクトを指定してOutputDataBuilderオブジェクトを生成します。このコンストラクタは、電子フォーム格納パスをWebアプリケーションの仮想パスで指定する場合に使用します。

メソッドの概要

戻り値型

メソッド名

説明

org.w3c.dom.Document

getTemplateXMLData()

電子フォームから初期値のデータを設定するためのXMLデータの雛形を取得し、そのドキュメントオブジェクトを返します。

org.w3c.dom.Document

getTemplateItemAttribute()

推奨されていません。
電子フォームから項目制御情報の雛形を取得し、そのドキュメントオブジェクトを返します。

void

setXMLData(org.w3c.dom.Document, boolean)

ドキュメントオブジェクトを指定して、電子フォームをHTMLデータに変換するときの初期値のデータとして設定します。

void

setItemAttribute(org.w3c.dom.Document)

ドキュメントオブジェクトを指定して、電子フォームをHTMLデータに変換するときの項目制御情報として設定します。

void

write(java.io.OutputStream)

電子フォームをHTMLデータに変換し、指定した出力ストリームに出力します。

void

setDisplayMode(int)

電子フォームの表示モードを設定します。

String

getCharset()

write()メソッドで生成されるHTMLデータのキャラクタセットを通知します。

void

setHiddenControl(java.lang.String, java.lang.String)

write()メソッドで生成されるHTMLデータに埋め込むhidden項目の名前と値を設定します。

String

getContentType()

コンテントタイプの文字列を通知します。

フィールドの詳細

DISPMODE_ENV

形式:

public static final int DISPMODE_ENV

説明:

電子フォーム表示モードの環境定義モードを表します。
Formcoordinatorの環境設定に指定された電子フォーム表示モードに従います。

関連項目:

setDisplayMode()

DISPMODE_STANDARD

形式:

public static final int DISPMODE_STANDARD

説明:

電子フォーム表示モードの標準表示モードを表します。

関連項目:

setDisplayMode()

DISPMODE_UNIVERSAL

形式:

public static final int DISPMODE_UNIVERSAL

説明:

電子フォーム表示モードの汎用表示モードを表します。

関連項目:

setDisplayMode()

DISPMODE_SIMPLE

形式:

public static final int DISPMODE_SIMPLE

説明:

推奨されていません。
電子フォーム表示モードの簡易表示モードを表します。

関連項目:

setDisplayMode()

DISPMODE_AUTO

形式:

public static final int DISPMODE_AUTO

説明:

推奨されていません。
電子フォーム表示モードの自動判別モードを表します。

関連項目:

setDisplayMode()

■ コンストラクタの詳細

OutputDataBuilder(java.lang.String, java.lang.String, java.lang.String)

形式:

public OutputDataBuilder(java.lang.String userAgent, 
       java.lang.String formPath, java.lang.String formName)
  throws java.lang.IllegalArgumentException,
         java.lang.UnsatisfiedLinkError,
         com.fujitsu.form.XmlProcessorException

説明:

ユーザエージェント名、電子フォーム格納パス、および電子フォーム名を指定して、OutputDataBuilderオブジェクトを生成します。
電子フォーム格納パスはURIエンコードした文字列で指定します。詳細については3.2.2.1 URIエンコードについてを参照してください。また、現在利用できるプロトコルはfileだけです。


パラメタ:

userAgent

User-Agentヘッダの内容を表す文字列

formPath

電子フォーム格納パス

formName

電子フォーム名


例外:

java.lang.IllegalArgumentException

次に示すどちらかの場合

  • パラメタ「userAgent」、「formPath」、または「formName」がnullの場合

  • パラメタ「userAgent」が正しくない場合

java.lang.UnsatisfiedLinkError

ライブラリのロードに失敗した場合

com.fujitsu.form.XmlProcessorException

XMLデータを扱うためのオブジェクトを生成できなかった場合

OutputDataBuilder(java.lang.String, java.lang.String)

形式:

public OutputDataBuilder(java.lang.String userAgent, java.lang.String formName)
  throws java.lang.IllegalArgumentException,
         java.lang.UnsatisfiedLinkError,
         com.fujitsu.form.XmlProcessorException

説明:

ユーザエージェント名、電子フォーム名を指定して、OutputDataBuilderオブジェクトを生成します。
なお、電子フォームは、WindowsではFormcoordinatorの「環境設定」で、SolarisおよびLinuxではFormcoordinatorの環境設定コマンドのmxsetassetsdirコマンドで設定されている電子フォーム格納先ディレクトリから検索されます。


パラメタ:

userAgent

User-Agentヘッダの内容を表す文字列

formName

電子フォーム名


例外:

java.lang.IllegalArgumentException

次に示すどちらかの場合

  • パラメタ「userAgent」または「formName」がnullの場合

  • パラメタ「userAgent」が正しくない場合

java.lang.UnsatisfiedLinkError

ライブラリのロードに失敗した場合

com.fujitsu.form.XmlProcessorException

XMLデータを扱うためのオブジェクトを生成できなかった場合

OutputDataBuilder(javax.servlet.http.HttpServletRequest, java.lang.String, java.lang.String)

形式:

public OutputDataBuilder(javax.servlet.http.HttpServletRequest request,
                         java.lang.String formPath, java.lang.String formName)
  throws java.lang.IllegalArgumentException, 
         java.lang.UnsatisfiedLinkError, 
         com.fujitsu.form.XmlProcessorException

説明:

HttpServletRequestオブジェクト、電子フォーム格納パス、および電子フォーム名を指定して、OutputDataBuilderオブジェクトを生成します。
電子フォーム格納パスはURIエンコードした文字列で指定します。詳細については3.2.2.1 URIエンコードについてを参照してください。また、現在利用できるプロトコルはfileだけです。


パラメタ:

request

HttpServletRequestオブジェクト

formPath

電子フォーム格納パス

formName

電子フォーム名


例外:

java.lang.IllegalArgumentException

次に示すどちらかの場合

  • パラメタ「request」、「formPath」、または「formName」がnullの場合

  • 電子フォーム格納パスにfileプロトコル以外を指定した場合

java.lang.UnsatisfiedLinkError

ライブラリのロードに失敗した場合

com.fujitsu.form.XmlProcessorException

XMLデータを扱うためのオブジェクトを生成できなかった場合

OutputDataBuilder(javax.servlet.http.HttpServletRequest, java.lang.String)

形式:

public OutputDataBuilder(javax.servlet.http.HttpServletRequest request, 
                         java.lang.String formName)
  throws java.lang.IllegalArgumentException,
         java.lang.UnsatisfiedLinkError,
         com.fujitsu.form.XmlProcessorException

説明:

HttpServerRequestオブジェクトと電子フォーム名を指定してOutputDataBuilderオブジェクトを生成します。
なお、電子フォームは、WindowsではFormcoordinatorの「環境設定」で、SolarisおよびLinuxではFormcoordinatorの環境設定コマンドのmxsetassetsdirコマンドで設定されている電子フォーム格納先ディレクトリから検索されます。


パラメタ:

request

HttpServletRequestオブジェクト

formName

電子フォーム名


例外:

java.lang.IllegalArgumentException

パラメタ「request」または「formName」がnullの場合

java.lang.UnsatisfiedLinkError

ライブラリのロードに失敗した場合

com.fujitsu.form.XmlProcessorException

XMLデータを扱うためのオブジェクトを生成できなかった場合

OutputDataBuilder(javax.servlet.http.HttpServletRequest, java.lang.String, java.lang.String, javax.servlet.ServletContext)

形式:

public OutputDataBuilder(javax.servlet.http.HttpServletRequest request,
                         java.lang.String formPath, java.lang.String formName
                         javax.servlet.ServletContext context)
  throws java.lang.IllegalArgumentException, 
         java.lang.UnsatisfiedLinkError, 
         com.fujitsu.form.XmlProcessorException

説明:

HttpServletRequestオブジェクト、電子フォーム格納パス、電子フォーム名およびServletContextオブジェクトを指定して、OutputDataBuilderオブジェクトを生成します。
このコンストラクタは、電子フォーム格納パスをWebアプリケーションの仮想パスで指定する場合に使用します。電子フォーム格納パスはURIエンコードした文字列で指定します。詳細については3.2.2.1 URIエンコードについてを参照してください。
クライアント印刷を利用する場合、指定された電子フォームが使用されます。環境設定の電子フォーム格納先URLは無効となります。
指定方法の詳細については、「■ 使用例」の「電子フォーム格納パスにWebアプリケーションの仮想パスを指定する場合」を参照してください。


パラメタ:

request

HttpServletRequestオブジェクト

formPath

電子フォーム格納パス
Webアプリケーションの仮想パスを「/」から始まる形式で指定してください。

formName

電子フォーム名

context

ServletContextオブジェクト


例外:

java.lang.IllegalArgumentException

次に示すどれかの場合

  • パラメタ「request」、「formPath」、「formName」、または「context」がnullの場合

  • パラメタ「request」からユーザエージェントが取得できなかった場合

  • パラメタ「formPath」に指定された仮想パスが「/」から始まっていない場合

  • パラメタ「formPath」に指定された仮想パスから物理パスへの変換に失敗した場合(コンテンツが.warアーカイブにより提供されている場合など)

java.lang.UnsatisfiedLinkError

ライブラリのロードに失敗した場合

com.fujitsu.form.XmlProcessorException

XMLデータを扱うためのオブジェクトを生成できなかった場合

■ メソッドの詳細

getTemplateXMLData()

形式:

public org.w3c.dom.Document getTemplateXMLData()
  throws com.fujitsu.form.XmlProcessorException,
         com.fujitsu.form.FormIOException

説明:

電子フォームからXMLデータの雛形に対応するドキュメントオブジェクトを返します。


パラメタ:

なし


戻り値:

XMLデータの雛形を表すドキュメントオブジェクト


例外:

com.fujitsu.form.XmlProcessorException

ドキュメントオブジェクトの生成に失敗した場合

com.fujitsu.form.FormIOException

電子フォームが見つからなかった場合

setXMLData(org.w3c.dom.Document, boolean)

形式:

public void setXMLData(org.w3c.dom.Document xmlData,
                       boolean mergeDescriptorValue)
  throws com.fujitsu.form.XmlProcessorException

説明:

XMLデータのドキュメントオブジェクトを、電子フォームをHTMLデータに変換するときの初期値のデータとして設定します。パラメタ「xmlData」にnullを指定した場合は、初期値のデータとしてXMLデータは無効となります。
HTMLデータに変換するときに初期値のデータを設定しないで変換するには、パラメタ「xmlData」にnullを指定し、パラメタ「mergeDescriptorValue」にfalseを指定してください。
このメソッドの呼び出しを省略した場合には、電子フォームに設定されている項目の初期値が初期値のデータになります。


パラメタ:

xmlData

XMLデータを表すドキュメントオブジェクト

mergeDescriptorValue

trueの場合、電子フォームに設定されている項目の初期値またはパラメタ「xmlData」に設定されている項目のデータが初期値のデータになります。このとき、パラメタ「xmlData」に設定されている項目タグが空タグであるかまたは存在しない場合、電子フォームに設定されている項目の初期値が、初期値のデータになります。
falseの場合、電子フォームに設定されている項目の初期値は無効になります。この場合、パラメタ「xmlData」の値だけが初期値になります。


戻り値:

なし


例外:

com.fujitsu.form.XmlProcessorException

ドキュメントオブジェクトの設定に失敗した場合

setItemAttribute(org.w3c.dom.Document)

形式:

public void setItemAttribute(org.w3c.dom.Document attData)
  throws com.fujitsu.form.XmlProcessorException

説明:

項目制御情報のドキュメントオブジェクトを指定して、電子フォームをHTMLデータに変換するときの項目制御情報として設定します。
電子フォームをHTMLデータに変換するときには、電子フォームの項目に設定されている情報とパラメタ「attData」の情報で変換されます。このとき、パラメタ「attData」の項目タグに項目制御情報が設定されていない場合は、電子フォームの項目に設定されている情報で変換されます。パラメタ「attData」にnullを指定した場合は、電子フォームの項目に設定されている情報で変換されます。


パラメタ:

attData

項目制御情報を表すドキュメントオブジェクト
ItemAttributeAccessクラスで作成した項目制御情報のドキュメントオブジェクトを指定してください。


戻り値:

なし


例外:

com.fujitsu.form.XmlProcessorException

ドキュメントオブジェクトの設定に失敗した場合

write(java.io.OutputStream)

形式:

public void write(java.io.OutputStream out)
  throws java.io.IOException,
         com.fujitsu.form.FormIOException,
         com.fujitsu.form.XmlProcessorException

説明:

電子フォームをHTMLデータに変換して出力ストリームに出力します。この際、HTMLデータは、標準表示モードまたは汎用表示モードのときはUTF-8、簡易表示モードのときはShift_JISとなります。
電子フォームがHTMLデータに変換されるときには、setXMLData()メソッドおよびsetItemAttribute()メソッドで設定している初期値のデータおよび項目制御情報が使用されます。初期値のデータおよび項目制御情報を設定していない場合は、電子フォームの初期値および設定情報でHTMLデータに変換されます。


パラメタ:

out

出力先の出力ストリームオブジェクト


戻り値:

なし


例外:

java.io.IOException

HTMLデータを出力中のIO例外。

com.fujitsu.form.FormIOException

次に示すどれかの場合

  • 電子フォームが見つからなかった場合

  • 電子フォームがHTMLデータに変換できなかった場合

  • 署名オプションがインストールされていない環境で署名機能を指定した電子フォームを指定した場合

com.fujitsu.form.XmlProcessorException

XMLデータのアクセスに失敗した場合

setDisplayMode(int)

形式:

public void setDisplayMode(int dispmode)

説明:

電子フォームの表示モードを設定します。初期値は環境定義モード(DISPMODE_ENV)です。環境定義モードの場合、WindowsではFormcoordinatorの環境設定で、SolarisおよびLinuxではFormcoordinatorの環境設定コマンドのmxsetenvコマンドで指定された電子フォーム表示モードに従います。指定がない場合は、標準表示モードで表示されます。write()メソッドの呼び出し前に設定してください。
また、サポート外のWebブラウザの場合、標準表示モード(DISPMODE_STANDARD)または汎用表示モード(DISPMODE_UNIVERSAL)では、write()メソッドで「この製品で使用できないWebブラウザから呼び出されたため、処理を中止しました。」という例外が通知されます。
簡易表示モード(DISPMODE_SIMPLE)または自動判別モード(DISPMODE_AUTO)では、write()メソッドで例外は通知されませんが、動作は保証されません。


パラメタ:

dispmode

詳細を次に示します。

DISPMODE_ENV

環境定義モード

DISPMODE_STANDARD

標準表示モード

DISPMODE_UNIVERSAL

汎用表示モード

DISPMODE_SIMPLE

簡易表示モード

DISPMODE_AUTO

自動判別モード

上記以外を指定した場合は、初期値である環境定義モード(DISPMODE_ENV)が設定されます。

注意

簡易表示モード(DISPMODE_SIMPLE)および自動判別モード(DISPMODE_AUTO)は推奨されていません。環境定義モード(DISPMODE_ENV)、標準表示モード(DISPMODE_STANDARD)および汎用表示モード(DISPMODE_UNIVERSAL)のどれかを使用してください。

戻り値:

なし


例外:

なし

getCharset()

形式:

public String getCharset()
  throws com.fujitsu.form.FormIOException

説明:

write()メソッドで生成されるHTMLデータのキャラクタセットを通知します。
通知されたキャラクタセットを利用して、サーブレットのresponseオブジェクトでsetContentType()メソッドに指定します。
HTMLデータのキャラクタセットは電子フォームの表示モードによって決定されるため、このメソッドでキャラクタセットを取得する前に、あらかじめsetDisplayMode()メソッドで表示モードを変更しておく必要があります。表示モードは変更していない場合および不正な表示モード値で変更した場合は、初期値である環境定義モードが設定されます。
以下に、表示モードごとに通知されるキャラクタセットを示します。

標準表示モード、汎用表示モード

  UTF-8

簡易表示モード

  Shift_JIS

なお、標準表示モードまたは汎用表示モードが未サポートのWebブラウザの場合でも、このメソッドではキャラクタセットとしてUTF-8が通知されます。
使用例を次に示します。


例:

OutputDataBuilder odb = new OutputDataBuilder(request, "電子フォーム名");

// 汎用表示モードを指定します。
odb.setDisplayMode(odb.DISPMODE_UNIVERSAL);
String contentType = "text/html; charset=" + odb.getCharset();

// 上記文字列はこの場合、"text/html; charset=UTF-8"となります。
response.setContentType(contentType);

odb.write(response.getOutputStream());

パラメタ:

なし


戻り値:

キャラクタセット。

Shift_JISまたはUTF-8


例外:

com.fujitsu.form.FormIOException

内部エラーが発生した場合

setHiddenControl(java.lang.String, java.lang.String)

形式:

public void setHiddenControl(java.lang.String name, java.lang.String value)
  throws java.lang.IllegalArgumentException

説明:

HTMLデータに埋め込むhidden項目(INPUTタグのhidden属性データ)を設定します。write()メソッドの前に呼び出す必要があります。複数のhidden項目を設定する場合は、このメソッドを複数回、呼び出す必要があります。すでに設定済みの名前で再度、設定した場合、すでに登録されている値は上書きされます。また、すでに設定したhidden項目を無効にする場合は、値にnullを指定してください。名前にnullまたは空文字列を指定した場合は、例外が通知されます。ただし、値に空文字列を指定した場合は、登録されます。
なお、nameには、Formcoordinatorでの予約語であるFjXML(大文字と小文字は区別しません)で始まる名前を指定しないでください。指定した場合は、例外が通知されます。
また、電子フォームで利用されている項目名またはラジオボタングループ名と同じ名前をnameに指定するとwrite()メソッドで例外が発生するため、使用しないでください。
nameに指定できる文字は、電子フォームデザイナで項目名として利用できる文字です。
nameにFjXMLで始まる半角英数字、または、reset、onreset、onsubmit、name、id、length、actionなどの半角英数字を指定した場合、Webブラウザによって電子フォームが正しく動作しないことがあります。
nameにFjXMLで始まる半角英数字は使用しないでください。また、nameに半角英数字を指定する場合、次に示す例のようにnameの最後に数字を付加するようにしてください。


例:

setHiddenControl("length0001" ,"30");

nameに指定できる最大文字数は30文字です。

次に示す規約に従ってください。

また、nameには、HTMLの文字参照は利用しないでください。
このメソッドで指定したnameとvalueは、次に示す例のように、INPUTタグに展開され、電子フォームをHTMLデータに変換した際に一緒に埋め込まれます。


例:setHiddenControl()メソッドのname"HIDDEN"を、value"HIDDENVALUE"を指定した場合

標準表示モード、汎用表示モード:
<INPUT type="hidden" id="HIDDEN" name="HIDDEN" value="HIDDENVALUE" />

簡易表示モード:
<INPUT type="hidden" name="HIDDEN" value="HIDDENVALUE" />

valueに「<」「>」「&」「"」を指定する場合は、必ずHTMLの文字参照で指定してください。

「<」「>」「&」「"」に対応するHTMLの文字参照を次に示します。

また、「'」を指定する場合は、「&apos;」ではなく、「'」のまま指定してください。
valueに指定できる文字に制限はありませんが、HTMLの文字参照を指定する場合は、HTMLの規約に従った文字列で指定してください。
「&#***;」の「***」部分は、参照する文字によって違います。
valueに指定できる最大文字数は524288文字です。

注意

複数のvalueを登録する場合は、全体で524288文字を超えないように設計してください。
write()メソッドで数メガバイトを超えるHTMLとなる場合、Webブラウザで表示が遅くなったり、正しく動作しなかったりする場合があります。

表示モードが簡易表示モードの場合は、Shift_JISの範囲の文字を使用してください。UNICODE固有文字などは使用できません。
なお、Shift_JISの範囲の文字でも、次に示す文字は使用できません。

  • JIS9区~15区(NEC特殊文字などの機種依存文字)

  • JIS85区以降(NEC/IBM選定文字、IBM拡張文字、外字など)

  • \(バックスラッシュ)

パラメタ:

name

hidden項目名

value

hidden項目の値


戻り値:

なし


例外:

java.lang.IllegalArgumentException

次に示すどちらかの場合

  • nameがnull、空文字列、またはFjXML(大文字と小文字は区別しません)で始まる文字列の場合

  • nameまたはvalueに指定できる最大文字数を超えていた場合


補足:

このメソッドの使用例を次に示します。


例:Version=1.0という情報を埋め込む場合

setHiddenControl("Version" ,"1.0");

例:複数のINPUTタグを埋め込む場合
(Version=1.0
およびApplicationName=HIDDEN)

setHiddenControl("Version" ,"1.0");
setHiddenControl("ApplicationName" ,"HIDDEN");

例:Version=1.0という情報で1.0のあとに、改行コード0x0aを参照文字で埋め込む場合

setHiddenControl("Version" ,"1.0&#10;");

getContentType()

形式:

public String getContentType()
  throws com.fujitsu.form.FormIOException

説明:

write()メソッドで生成されるHTMLデータのコンテントタイプを通知します。
通知されたコンテントタイプを利用して、サーブレットのresponseオブジェクトでsetContentType()メソッドに指定します。
HTMLデータのコンテントタイプは電子フォームの表示モードによって決定されるため、このメソッドでコンテントタイプを取得する前に、あらかじめsetDisplayMode()メソッドで表示モードを変更しておく必要があります。表示モードは変更していない場合および不正な表示モード値で変更した場合は、初期値である環境定義モードが設定されます。
なお、このメソッドでは、getCharset()メソッドで通知されるキャラクタセットを利用し、コンテントタイプ文字列を生成します。


例:

OutputDataBuilder odb = new OutputDataBuilder(request, "電子フォーム名");

// 汎用表示モードを指定します。
odb.setDisplayMode(odb.DISPMODE_UNIVERSAL);

// この場合、"text/html; charset=UTF-8"で設定されます。
response.setContentType(odb.getContentType());

odb.write(response.getOutputStream());

パラメタ:

なし


戻り値:

"text/html; charset=Shift_JIS"または"text/html; charset=UTF-8"


例外:

com.fujitsu.form.FormIOException

内部エラーが発生した場合

XMLデータ形式について

getTemplateXMLData()メソッド、setXMLData()メソッドで扱うXML データ、および、setItemAttribute()メソッドで扱う項目制御は、ドキュメントオブジェクトです。
getTemplateXMLData()メソッドおよびsetXMLData()メソッドで扱われるドキュメントオブジェクトについては、「2.3.1 処理の流れとデータ」の「■ Webブラウザに送信するデータ」を参照してください。
setItemAttribute()メソッドで扱われるドキュメントオブジェクトについては、「2.3.1 処理の流れとデータ」の「■ 項目制御情報」を参照してください。


電子フォーム格納パスの指定について

Webアプリケーション全体で同じ電子フォーム格納パスを使用する場合、WindowsではFormcoordinatorの環境設定で、SolarisおよびLinuxではFormcoordinatorの環境設定コマンドのmxsetassetsdirコマンドで、電子フォーム格納先ディレクトリを設定します。この場合、OutputDataBuilderクラスのコンストラクタでは、電子フォーム格納パスを省略できます。
Webアプリケーションごとに異なる電子フォーム格納パスを使用する場合は、サーブレットの初期化パラメタを利用することで、運用環境で格納先が変更になっても、Webアプリケーションを修正しないで格納先を変更できます。
サーブレットの初期化パラメタに電子フォーム格納パスを渡す場合は、Webアプリケーション環境定義ファイルに指定します。
Webアプリケーション環境定義ファイルは、次に示す構成で配置されています。

例:記述方法

Windows電子フォーム格納パスを「c:\pmd」としたい場合、DescriptorStoragePath(任意に定義できます)をパラメタ名とし、その値として、電子フォーム格納パスを指定します。

<servlet>
   <servlet-name>servletapp</servlet-name>
   <servlet-class>servletapp</servlet-class>
   <init-param>
       <param-name>DescriptorStoragePath</param-name>
       <param-value>file:///c:/pmd</param-value>
   </init-param>
</servlet>

SolarisLinux電子フォーム格納パスを「/home/pmd」としたい場合、DescriptorStoragePath(任意に定義できます)をパラメタ名とし、その値として、電子フォーム格納パスを指定します。

<servlet>
   <servlet-name>servletapp</servlet-name>
   <servlet-class>servletapp</servlet-class>
   <init-param>
       <param-name>DescriptorStoragePath</param-name>
       <param-value>file:////home/pmd</param-value>
   </init-param>
</servlet>

例:取得方法

電子フォーム格納パスは、java.servlet.ServletConfigインターフェースのgetInitParameter()メソッドで取得します。

String formPath = getInitParameter("DescriptorStoragePath");

使用例

OutputDataBuilderクラスの使用例を次に示します。

Webブラウザから送信された入力データを使用して電子フォームを表示する場合

この例では、InputDataBuilderクラスのgetXMLData()メソッドでWebブラウザからXMLデータ形式で送信された入力データのドキュメントオブジェクトを生成しています。生成したドキュメントオブジェクトをOutputDataBuilderクラスのsetXMLData()メソッドで設定してwrite()メソッドを行い、Webブラウザから送信されたデータを電子フォームに表示しています。

import org.w3c.dom.* ;
import javax.servlet.* ;
import javax.servlet.http.* ;
import java.io.* ;
import com.fujitsu.form.* ;

public class SampleServlet extends HttpServlet {

  public void doPost(HttpServletRequest request,
                         HttpServletResponse response)
    throws IOException, ServletException
  {
    try {
      // InputDataBuilderオブジェクトを生成します。
      InputDataBuilder idb = new InputDataBuilder(request);

      // Webブラウザから送信された入力データをドキュメントオブジェクトで取得
      // します。
      Document doc = idb.getXMLData() ;
   
      // OutputDataBuilderオブジェクトを生成します。
      // Windowsの場合は以下のように記述します。
      OutputDataBuilder odb = new OutputDataBuilder(request,
                        java.net.URLEncoder.encode(
                        "file:///c:/pmd",System.getProperty(
                        "file.encoding")), "sample");
      // SolarisおよびLinuxの場合は以下のように記述します。
      // OutputDataBuilder odb = new OutputDataBuilder(request,
      //                   java.net.URLEncoder.encode(
      //                   "file:////home/pmd",System.getProperty(
      //                   "file.encoding")), "sample");
      // もう一方のコンストラクタの場合は以下のとおりです。
      // Windowsの場合は以下のように記述します。
      // OutputDataBuilder odb = new OutputDataBuilder(request.getHeader(
      //                   "User-Agent"), java.net.URLEncoder.encode(
      //                   "file:///c:/pmd",System.getProperty(
      //                   "file.encoding")), "sample");
      // SolarisおよびLinuxの場合は以下のように記述します。
      // OutputDataBuilder odb = new OutputDataBuilder(request.getHeader(
      //                   "User-Agent"), java.net.URLEncoder.encode(
      //                   "file:////home/pmd",System.getProperty(
      //                   "file.encoding")), "sample");

      // Webブラウザから送信された入力データを設定します。
        odb.setXMLData(doc, true) ;

      // 設定した入力データを使用して、電子フォームをHTMLデータに変換して
      // 出力します。
      odb.write(response.getOutputStream());
    }
    catch(Exception e){
      // 例外処理
                    ・
                    ・
                    ・
    }
  }
}

雛形のXMLデータを取得して電子フォームを表示する場合

この例では、OutputDataBuilderクラスのgetTemplateXMLData()メソッドで雛形のXMLデータを取得します。取得した雛形のXMLデータにsetXMLData()メソッドで初期値を設定してwrite()メソッドを行い、電子フォームを表示します。

import org.w3c.dom.* ;
import javax.servlet.* ;
import javax.servlet.http.* ;
import java.io.* ;
import com.fujitsu.form.* ;

public class SampleServlet extends HttpServlet {

  public void doPost(HttpServletRequest request,
                         HttpServletResponse response)
    throws IOException, ServletException
  {
    try {
      // OutputDataBuilderオブジェクトを生成します。
      // Windowsの場合は以下のように記述します。
      OutputDataBuilder odb = new OutputDataBuilder(request,
            java.net.URLEncoder.encode("file:///c:/pmd",
                          System.getProperty("file.encoding")), "sample");
      // SolarisおよびLinuxの場合は以下のように記述します。
      // OutputDataBuilder odb = new OutputDataBuilder(request,
      //       java.net.URLEncoder.encode("file:////home/pmd",
      //                     System.getProperty("file.encoding")), "sample");
      // 雛形のXMLデータをドキュメントオブジェクトで取得します。
      Document doc = odb.getTemplateXMLData() ;

      // 雛形のXMLデータを更新します。
      // 更新処理
                    ・
                    ・
                    ・
   
      // 更新したXMLデータを初期値のデータとして設定します。
      odb.setXMLData(doc, true) ;

      // 設定した初期値のデータを使用して、電子フォームをHTMLデータに変換して
      // 出力します。
      odb.write(response.getOutputStream());
    }
    catch(Exception e){
      // 例外処理
                    ・
                    ・
                    ・
    }
  }
}

項目制御情報を指定して電子フォームを表示する場合

この例では、ItemAttributeAccessクラスで項目制御情報を作成します。setItemAttribute()メソッドで作成した項目制御情報を設定したあと、write()メソッドを行い、電子フォームを表示します。

import javax.servlet.* ;
import javax.servlet.http.* ;
import java.io.* ;
import com.fujitsu.form.* ;

public class SampleServlet extends HttpServlet {

  public void doPost(HttpServletRequest request,
                         HttpServletResponse response)
    throws IOException, ServletException
  {
    try {
      // OutputDataBuilderオブジェクトを生成します。
      // Windowsの場合は以下のように記述します。
      OutputDataBuilder odb = new OutputDataBuilder(request,
            java.net.URLEncoder.encode("file:///c:/pmd",
                          System.getProperty("file.encoding")), "sample");
      // SolarisおよびLinuxの場合は以下のように記述します。
      // OutputDataBuilder odb = new OutputDataBuilder(request,
      //       java.net.URLEncoder.encode("file:////home/pmd",
      //                     System.getProperty("file.encoding")), "sample");
      // 項目に項目制御情報を設定します。
      ItemAttributeAccess iaa = new ItemAttributeAccess("項目制御情報");

      // 更新処理
                    ・
                    ・
                    ・
   
      // 更新した項目制御情報を、使用する情報として設定します。
      odb.setItemAttribute(iaa.getDocument()) ;

      // 設定した項目制御情報を使用して、電子フォームをHTMLデータに変換して
      // 出力します。
      odb.write(response.getOutputStream());
    }
    catch(Exception e){
      // 例外処理
                    ・
                    ・
                    ・
    }
  }
}

電子フォーム格納パスにWebアプリケーションの仮想パスを指定する場

この例では、電子フォーム格納パスにWebアプリケーションの仮想パスを指定して、OutputDataBuilderオブジェクトを生成します。コンストラクタに指定するServletContextオブジェクトはHttpServletクラスのgetServletContext()から取得します。

この例で使用するWebアプリケーションの構成は以下の通りです。

import java.io.IOException ;

import javax.servlet.ServletException ;
import javax.servlet.ServletContext ;
import javax.servlet.http.HttpServlet ;
import javax.servlet.http.HttpServletRequest ;
import javax.servlet.http.HttpServletResponse ;

import com.fujitsu.form.OutputDataBuilder ;


public class SampleServlet extends HttpServlet {

  public void doGet(HttpServletRequest request,
                         HttpServletResponse response)
    throws IOException, ServletException
  {
    try {

      // ServletContextオブジェクトを生成します。
      ServletContext context = getServletContext();

      // 電子フォーム格納パスをURIエンコードします。
      String formPath = java.net.URLEncoder.encode("/eform",
                         System.getProperty("file.encoding"));

      // OutputDataBuilderを構築します。
      OutputDataBuilder odb = new OutputDataBuilder(
                                request, formPath, "sample", context) ;

      //電子フォームを出力します。
      odb.write(response.getOutputStream());
    }
    catch(Exception e){
      // 例外処理
             ・
             ・
             ・
    }
  }
}