0

Web フォームを使用して情報を送信すると、入力したフォーム情報が JSP ページに表示されます。ただし、フォームの送信ボタンをクリックすると、正しい JSP ファイルに移動しますが、すべてのフォーム値が「null」として表示されます。私はJerseyを使ってPOSTリクエストを行っています。

フォームは次のとおりです。

<form action="/MyRestWS/rest/customer/created" method="POST">
    <table border="1">
        <tr>
            <td>Customer name:</td>
            <td><input type="text" name="name"></td>
        </tr>
        <tr>
            <td>Customer ID:</td>
            <td><input type="text" name="id"></td>
        </tr>
        <tr>
            <td>Customer DOB:</td>
            <td><input type="text" name="dob"></td>
        </tr>
    </table>
    <br/>
    <input type="submit" value="Submit">
</form>

リクエストを実行するコードは次のとおりです。

@Path("/customer")
public class CustomerService {

    @POST
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    @Path("created")
    public Response createCustomer(@FormParam("id") int id, @FormParam("name") String name, @FormParam("dob") Date dob) {
        Response r;

        r = Response.ok().entity(new Viewable("/confirm.jsp")).build();
        return r;
    }

    @GET
    @Produces(MediaType.TEXT_HTML)
    public Viewable displayForm() {
        return new Viewable("/form.html");
    }
}

表示される JSP ファイルconfirm.jspとその内容は次のとおりです。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Your entered information</title>
</head>
<body>
    <h2>
        <%
            out.println("You've entered the following information:");
        %>
    </h2>

    <p>
        Customer Name:
        <%=request.getParameter("name")%></p>
    <p>
        Customer ID:
        <%=request.getParameter("id")%></p>
    <p>
        Customer DOB:
        <%=request.getParameter("dob")%></p>
</body>
</html>

ブラウザに次のアドレスを入力すると:

http://localhost:8080/MyRestWS/rest/customer

フォーム付きで表示されますform.html。情報を入力して [送信] をクリックすると、次のアドレスに移動し、パスで指定された JSP ファイルが表示されます。

http://localhost:8080/MyRestWS/rest/customer/created

JSP ファイルは正しく表示されますが、次のようにすべての顧客情報フィールドが「null」として表示されます。

You've entered the following information:

Customer Name: null

Customer ID: null

Customer DOB: null

では、フォームを送信した後に JSP で null 値を取得するのはなぜですか? コードの何が問題になっていますか?

4

2 に答える 2

3

存在しないリクエスト パラメータを表示しようとしています。それらは、最初のリクエストであるフォーム送信の間だけ存在します。

それらを再度表示したい場合は、それらをリクエスト属性としてビューレイヤーに公開する必要があります。

(とは言っても、それらが構築されたクラスの一部として公開されれば、私はもっと幸せになるでしょう。)

于 2013-05-28T18:06:39.487 に答える
0

createCustomer()Dave の提案に従って、メソッドに次の request 属性を追加し、入力されたフォーム データを取得するために使用request.getAttribute()しました。confirm.jspそれは最終的に動作します。フォームを送信すると、confirm.jsp ファイルにすべての情報が正しく表示されます。

    request.setAttribute("name", name);
    request.setAttribute("dob", dob);
    request.setAttribute("id", Integer.valueOf(id));
    RequestDispatcher dispatcher = request.getRequestDispatcher("/confirm.jsp");
    dispatcher.forward(request, response);

ただし、1 つの副次的な質問は、クラス フィールドで次のインジェクションを使用する必要があったことです。

@Context HttpServletRequest request;
@Context HttpServletResponse response;

代わりに以下を使用すると、例外エラーが発生します。

@Context ServletRequest request;
@Context ServletResponse response;

何故ですか?

于 2013-05-29T15:42:39.927 に答える