電子フォームから雛形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 | 環境定義モードを表します。 | |
public static final int | 標準表示モードを表します。 | |
public static final int | 汎用表示モードを表します。 | |
public static final int | 推奨されていません。簡易表示モードを表します。 | |
public static final int | 推奨されていません。自動判別モードを表します。 |
■ コンストラクタの概要
コンストラクタ名 | 説明 |
---|---|
public | ユーザエージェント名、電子フォーム格納パス、および電子フォーム名を指定して、OutputDataBuilderオブジェクトを生成します。 |
ユーザエージェント名と電子フォーム名を指定して、OutputDataBuilderオブジェクトを生成します。 | |
public | HttpServletRequestオブジェクト、電子フォーム格納パス、および電子フォーム名を指定して、OutputDataBuilderオブジェクトを生成します。 |
public | HttpServerRequestオブジェクトと電子フォーム名を指定して、OutputDataBuilderオブジェクトを生成します。 |
HttpServletRequestオブジェクトと電子フォーム格納パス、電子フォーム名、ServletContextオブジェクトを指定してOutputDataBuilderオブジェクトを生成します。このコンストラクタは、電子フォーム格納パスをWebアプリケーションの仮想パスで指定する場合に使用します。 |
■ メソッドの概要
戻り値型 | メソッド名 | 説明 |
---|---|---|
org.w3c.dom.Document | 電子フォームから初期値のデータを設定するためのXMLデータの雛形を取得し、そのドキュメントオブジェクトを返します。 | |
org.w3c.dom.Document | getTemplateItemAttribute() | 推奨されていません。 |
void | ドキュメントオブジェクトを指定して、電子フォームをHTMLデータに変換するときの初期値のデータとして設定します。 | |
void | ドキュメントオブジェクトを指定して、電子フォームをHTMLデータに変換するときの項目制御情報として設定します。 | |
void | 電子フォームをHTMLデータに変換し、指定した出力ストリームに出力します。 | |
void | 電子フォームの表示モードを設定します。 | |
String | write()メソッドで生成されるHTMLデータのキャラクタセットを通知します。 | |
void | write()メソッドで生成されるHTMLデータに埋め込むhidden項目の名前と値を設定します。 | |
String | コンテントタイプの文字列を通知します。 |
■ フィールドの詳細
形式:
public static final int DISPMODE_ENV
説明:
電子フォーム表示モードの環境定義モードを表します。
Formcoordinatorの環境設定に指定された電子フォーム表示モードに従います。
関連項目:
setDisplayMode()
形式:
public static final int DISPMODE_STANDARD
説明:
電子フォーム表示モードの標準表示モードを表します。
関連項目:
setDisplayMode()
形式:
public static final int DISPMODE_UNIVERSAL
説明:
電子フォーム表示モードの汎用表示モードを表します。
関連項目:
setDisplayMode()
形式:
public static final int DISPMODE_SIMPLE
説明:
推奨されていません。
電子フォーム表示モードの簡易表示モードを表します。
関連項目:
setDisplayMode()
形式:
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だけです。
パラメタ:
User-Agentヘッダの内容を表す文字列
電子フォーム格納パス
電子フォーム名
例外:
次に示すどちらかの場合
パラメタ「userAgent」、「formPath」、または「formName」がnullの場合
パラメタ「userAgent」が正しくない場合
ライブラリのロードに失敗した場合
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コマンドで設定されている電子フォーム格納先ディレクトリから検索されます。
パラメタ:
User-Agentヘッダの内容を表す文字列
電子フォーム名
例外:
次に示すどちらかの場合
パラメタ「userAgent」または「formName」がnullの場合
パラメタ「userAgent」が正しくない場合
ライブラリのロードに失敗した場合
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だけです。
パラメタ:
HttpServletRequestオブジェクト
電子フォーム格納パス
電子フォーム名
例外:
次に示すどちらかの場合
パラメタ「request」、「formPath」、または「formName」がnullの場合
電子フォーム格納パスにfileプロトコル以外を指定した場合
ライブラリのロードに失敗した場合
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コマンドで設定されている電子フォーム格納先ディレクトリから検索されます。
パラメタ:
HttpServletRequestオブジェクト
電子フォーム名
例外:
パラメタ「request」または「formName」がnullの場合
ライブラリのロードに失敗した場合
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アプリケーションの仮想パスを指定する場合」を参照してください。
パラメタ:
HttpServletRequestオブジェクト
電子フォーム格納パス
Webアプリケーションの仮想パスを「/」から始まる形式で指定してください。
電子フォーム名
ServletContextオブジェクト
例外:
次に示すどれかの場合
パラメタ「request」、「formPath」、「formName」、または「context」がnullの場合
パラメタ「request」からユーザエージェントが取得できなかった場合
パラメタ「formPath」に指定された仮想パスが「/」から始まっていない場合
パラメタ「formPath」に指定された仮想パスから物理パスへの変換に失敗した場合(コンテンツが.warアーカイブにより提供されている場合など)
ライブラリのロードに失敗した場合
XMLデータを扱うためのオブジェクトを生成できなかった場合
■ メソッドの詳細
形式:
public org.w3c.dom.Document getTemplateXMLData() throws com.fujitsu.form.XmlProcessorException, com.fujitsu.form.FormIOException
説明:
電子フォームからXMLデータの雛形に対応するドキュメントオブジェクトを返します。
パラメタ:
なし
戻り値:
XMLデータの雛形を表すドキュメントオブジェクト
例外:
ドキュメントオブジェクトの生成に失敗した場合
電子フォームが見つからなかった場合
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を指定してください。
このメソッドの呼び出しを省略した場合には、電子フォームに設定されている項目の初期値が初期値のデータになります。
パラメタ:
XMLデータを表すドキュメントオブジェクト
trueの場合、電子フォームに設定されている項目の初期値またはパラメタ「xmlData」に設定されている項目のデータが初期値のデータになります。このとき、パラメタ「xmlData」に設定されている項目タグが空タグであるかまたは存在しない場合、電子フォームに設定されている項目の初期値が、初期値のデータになります。
falseの場合、電子フォームに設定されている項目の初期値は無効になります。この場合、パラメタ「xmlData」の値だけが初期値になります。
戻り値:
なし
例外:
ドキュメントオブジェクトの設定に失敗した場合
setItemAttribute(org.w3c.dom.Document)
形式:
public void setItemAttribute(org.w3c.dom.Document attData) throws com.fujitsu.form.XmlProcessorException
説明:
項目制御情報のドキュメントオブジェクトを指定して、電子フォームをHTMLデータに変換するときの項目制御情報として設定します。
電子フォームをHTMLデータに変換するときには、電子フォームの項目に設定されている情報とパラメタ「attData」の情報で変換されます。このとき、パラメタ「attData」の項目タグに項目制御情報が設定されていない場合は、電子フォームの項目に設定されている情報で変換されます。パラメタ「attData」にnullを指定した場合は、電子フォームの項目に設定されている情報で変換されます。
パラメタ:
項目制御情報を表すドキュメントオブジェクト
ItemAttributeAccessクラスで作成した項目制御情報のドキュメントオブジェクトを指定してください。
戻り値:
なし
例外:
ドキュメントオブジェクトの設定に失敗した場合
形式:
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データに変換されます。
パラメタ:
出力先の出力ストリームオブジェクト
戻り値:
なし
例外:
HTMLデータを出力中のIO例外。
次に示すどれかの場合
電子フォームが見つからなかった場合
電子フォームがHTMLデータに変換できなかった場合
署名オプションがインストールされていない環境で署名機能を指定した電子フォームを指定した場合
XMLデータのアクセスに失敗した場合
形式:
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_ENV)が設定されます。
注意
簡易表示モード(DISPMODE_SIMPLE)および自動判別モード(DISPMODE_AUTO)は推奨されていません。環境定義モード(DISPMODE_ENV)、標準表示モード(DISPMODE_STANDARD)および汎用表示モード(DISPMODE_UNIVERSAL)のどれかを使用してください。
戻り値:
なし
例外:
なし
形式:
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
例外:
内部エラーが発生した場合
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の文字参照を次に示します。
「<」→「<」
「>」→「>」
「&」→「&」
「"」→「"」
また、「'」を指定する場合は、「'」ではなく、「'」のまま指定してください。
valueに指定できる文字に制限はありませんが、HTMLの文字参照を指定する場合は、HTMLの規約に従った文字列で指定してください。
「&#***;」の「***」部分は、参照する文字によって違います。
valueに指定できる最大文字数は524288文字です。
注意
複数のvalueを登録する場合は、全体で524288文字を超えないように設計してください。
write()メソッドで数メガバイトを超えるHTMLとなる場合、Webブラウザで表示が遅くなったり、正しく動作しなかったりする場合があります。
表示モードが簡易表示モードの場合は、Shift_JISの範囲の文字を使用してください。UNICODE固有文字などは使用できません。
なお、Shift_JISの範囲の文字でも、次に示す文字は使用できません。
JIS9区~15区(NEC特殊文字などの機種依存文字)
JIS85区以降(NEC/IBM選定文字、IBM拡張文字、外字など)
\(バックスラッシュ)
パラメタ:
hidden項目名
hidden項目の値
戻り値:
なし
例外:
次に示すどちらかの場合
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 ");
形式:
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"
例外:
内部エラーが発生した場合
■ 補足
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アプリケーション環境定義ファイルは、次に示す構成で配置されています。
格納場所
Webアプリケーションのルートフォルダ\WEB-INF
ファイル名
web.xml
web.xml内のサーブレット属性の初期化パラメタに、電子フォーム格納パスを定義します。
例:記述方法
電子フォーム格納パスを「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>
電子フォーム格納パスを「/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){ // 例外処理 ・ ・ ・ } } }