ドミノのフォームからサーブレットを呼ぶ、その呼び方とフォームのフィールドの使い方について紹介してみたいと思います。
ドミノでは大変かんたんに入力フォームなどを作成することができます。また、もうすでになんらかの入力用のフォームなどがある場合も多いでしょう。
こうしたフォームをサーブレットの入力用に使えるといろいろいいのではないか、というところからちょっと調べてみました。
まず最初にフォームから呼び出されるサーブレットを作成します。
渡された 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"をセットしています。

|
|