ドミノのフォームとサーブレットの関係

ドミノのフォームからサーブレットを呼ぶ、その呼び方とフォームのフィールドの使い方について紹介してみたいと思います。

ドミノでは大変かんたんに入力フォームなどを作成することができます。また、もうすでになんらかの入力用のフォームなどがある場合も多いでしょう。
こうしたフォームをサーブレットの入力用に使えるといろいろいいのではないか、というところからちょっと調べてみました。


まず最初にフォームから呼び出されるサーブレットを作成します。

パラメーターを取得するサーブレット

渡された HttpServletRequest オブジェクトから getParameter メソッド/getParameterValue メソッドを使用してパラメーターを取り出して一覧するサーブレットです。 getParameter メソッド/getParameterValue メソッドの両方をテストしてみました。

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ListParmServlet extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
doPost(req, res);
}

public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
PrintWriter out;

res.setContentType("text/html; charset=cp943");
out = res.getWriter ();

out.println("<html>");
out.println("<head><title>List Parameter Values Servlet</title></head>");
out.println("<body>");
out.println("<h1>Parameter Values:</h1>");

out.println("<TABLE border=\"1\" cellspacing=\"0\">");
Enumeration names = req.getParameterNames();
while( names.hasMoreElements() ) {
String name = names.nextElement().toString();
String value = req.getParameter( name );
out.println("<TR><TD>"+ name + "</TD><TD>" + value + "</TD></TR>");
}
out.println("</TABLE>");

out.println("<br>");

out.println("<TABLE border=\"1\" cellspacing=\"0\">");
names = req.getParameterNames();
while( names.hasMoreElements() ) {
String name = names.nextElement().toString();
String values[] = req.getParameterValues( name );
for (int i = 0; i < values.length; i++) {
out.println("<TR><TD>"+ name + "</TD><TD>" + values[i] + "</TD></TR>"); };
}
out.println("</TABLE>");

out.println("</body></html>");
}
}

doGet も doPost も両方実装しています。
サーブレット名に ?Parm = value で指定した GET の例です。こんなかんじの出力になります。

ドミノのフォームからのサーブレット呼び出し

テストのために以下のような簡単なフォームを作ってみます。フィールドは、テキストフィールドと数値フィールドがひとつづつです。

ほんとの一番最初に [ ] で囲んで </FORM><FORM ACTION="(サーブレットパス)" METHOD=post> と入力します。パススルーHTML でも OK です。

送信ボタンを作って document.forms[1].submit(); と入力してください。
forms[1] の理由は、最初の</FORM> でドミノが生成した FORM を区切り、<FORM 〜 で続く FORM を submit させるためです。

ブラウザーでプレビューをします。

生成された HTML です。

</FORM> でドミノが生成した FORM が区切られているのがわかると思います。

<FORM METHOD=post ACTION="/UDBTest.nsf/SimpleFormTest?OpenForm&Seq=1" NAME="_SimpleFormTest">
<INPUT TYPE=hidden NAME="__Click" VALUE="0"></FORM>

続いて新しい FORM が始まっているのが確認できます。

<FORM ACTION="/servlet/ListParmServlet" METHOD=post>

こちらの FORM で submit を行なうので、form[1] で 2つめのフォームを指定しているわけです。

<HTML>
<!-- Lotus-Domino (Release 5.0.9a - January 7, 2002 on OS/400) -->
<HEAD>

<SCRIPT LANGUAGE="JavaScript">
<!--
document._domino_target = "_self";
function _doClick(v, o, t, h) {
var form = document._SimpleFormTest;
if (form.onsubmit) {
var retVal = form.onsubmit();
if (typeof retVal == "boolean" && retVal == false)
return false;
}
var target = document._domino_target;
if (o.href != null) {
if (o.target != null)
target = o.target;
} else {
if (t != null)
target = t;
}
form.target = target;
form.__Click.value = v;
if (h != null)
form.action += h;
form.submit();
return false;
}
// -->
</SCRIPT>
</HEAD>
<BODY TEXT="000000" BGCOLOR="FFFFFF">

<FORM METHOD=post ACTION="/UDBTest.nsf/SimpleFormTest?OpenForm&Seq=1" NAME="_SimpleFormTest">
<INPUT TYPE=hidden NAME="__Click" VALUE="0"></FORM><FORM ACTION="/servlet/ListParmServlet" METHOD=post><BR>

<INPUT NAME="Text1" VALUE=""><BR>
<BR>

<INPUT NAME="Number1" VALUE=""><BR>
<BR>

<INPUT TYPE=button onClick="document.forms[1].submit();" VALUE="送信"></FORM>
</BODY>
</HTML>

フォームが表示されますので、それぞれ入力して「送信」してみましょう。

こちらがその出力です。
フォーム上のフィールドがそのままパラメーター名となって、値が入っているのが確認できますね。

今度は以前使用した CustForm を使用してみましょう。

上の例と同様に HTML文を入力します。
行をそのまま取ってしまいますので、一番上のフィールドの上の余白を変えたくない場合は以下のようにフィールドの前に入れてしまってください。
今回は NAME= で名前を指定し、送信ボタンでは forms[] のかわりにその名前を指定しています。

こちらが生成された HTML です。

<HTML>
<!-- Lotus-Domino (Release 5.0.9a - January 7, 2002 on OS/400) -->
<HEAD>

<SCRIPT LANGUAGE="JavaScript">
<!--
document._domino_target = "_self";
function _doClick(v, o, t, h) {
var form = document._CustFormTest;
if (form.onsubmit) {
var retVal = form.onsubmit();
if (typeof retVal == "boolean" && retVal == false)
return false;
}
var target = document._domino_target;
if (o.href != null) {
if (o.target != null)
target = o.target;
} else {
if (t != null)
target = t;
}
form.target = target;
form.__Click.value = v;
if (h != null)
form.action += h;
form.submit();
return false;
}
// -->
</SCRIPT>
</HEAD>
<BODY TEXT="000000" BGCOLOR="FFFFFF">

<FORM METHOD=post ACTION="/UDBTest.nsf/CustFormTest?OpenForm&Seq=1" NAME="_CustFormTest">
<INPUT TYPE=hidden NAME="__Click" VALUE="0"></FORM><FORM METHOD=post NAME="CustFormTest" ACTION="/servlet/ListParmServlet">
<INPUT NAME="CustID" VALUE=""><BR>
<BR>

<INPUT NAME="CustName" VALUE=""><BR>
<BR>

<INPUT NAME="CustAddr" VALUE=""><BR>
<BR>

<INPUT NAME="Sales" VALUE=""><BR>
<BR>

<INPUT TYPE=button onClick="document.CustFormTest.submit();" VALUE="送信"><BR>
</FORM>
</BODY>
</HTML>

実行例です。

出力例です。

入力した HTML ですが、

Webブラウザでの非表示は選ばないでください。

また、今回は文書を保存しないようにするために非表示で SaveOptions というフィールドを作成して"0"をセットしています。

[Top Pageに戻る]

Ads by TOK2