-1

次のスニペットは、データベースにキャプションを送信します。テキストを入力した後、[送信]をクリックしますが、驚いたことに、テーブルには常にnullが表示されます。以下のサーブレットコードとhtmlデザインについて説明しました。

<form method="post" action="Handler" enctype="multipart/form-data">
        <table>
            <tr>
                <td> <strong> Leave a caption </strong>  </td>
                <td> <input type="text" name="caption box" size="40" /></td>
            </tr>

            <tr colspan="2">
                <td> <input type="submit" value="submit caption"/> </td>
            </tr>
        </table>
    </form>

サーブレット

String caption = request.getParameter("caption box"); // get the caption from the caption field
HandleCaption hc = new HandleCaption(caption,emailOfTheUser,fileName);
hc.SubmitCaptionToTheDatabase(); 

クラス

public class HandleCaption {
private String Caption = null;
private String UserEmail = null;
private String NameOfThe = null;

public HandleCaption(String caption,String email,String filename) {
    Caption = caption;
    UserEmail = email;
    NameOfThe = filename;
}

public void SubmitCaptionToTheDatabase() {
    try {
        Context context = new InitialContext();
        DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/DS");
        Connection connection = ds.getConnection();
        String sqlQuery = "insert into CAPTIONS values ('" + UserEmail + "','" + NameOfThe + "','" + Caption + "')";
        PreparedStatement statement = connection.prepareStatement(sqlQuery);
        int x = statement.executeUpdate();
    }catch(Exception exc) {
        exc.printStackTrace();
    }
}

}

サーブレットで返されたテキストフィールドの値を出力してみましたが、nullも出力されました。テキストフィールドがnullを返すのはなぜですか?

4

2 に答える 2

2

なぜこれが発生するのかわかりませんが、1回か2回発生しました。キャプションクラスHandle Caption、次のように宣言します。

private String Caption = "";
private String UserEmail = "";
private String NameOfThe = "";

コンストラクターで渡された値を実際に参照しているので、質問に対するばかげた答えのように見えることは知っていますが、私はこれを経験し、それが私にとっての解決策です。試して返信してください!!

更新:エンコーディングタイプが原因で質問に誤って対処して申し訳ありませんが、なぜそれが発生するのかについて読みます..しかし、エンコーディングタイプを削除するだけで機能します..サンプルコードで試してみました

更新: multipart / form-dataでエンコードされたリクエストは、バージョン3.0より前のサーブレットAPIではデフォルトでサポートされていません。サーブレットAPIは、デフォルトでapplication/x-www-form-urlencodedエンコーディングを使用してパラメータを解析します。別のエンコーディングを使用する場合、request.getParameter()呼び出しはすべてnullを返します。

于 2012-04-27T07:12:28.123 に答える
1

フィールド名captionboxにスペースを含めることはできません。

<input type="text" name="captionbox" size="40" />

そことサーブレット側からスペースを削除します。

于 2012-04-27T06:46:55.163 に答える