0

私は現在javaeeの新機能です。クエリをファイリングするために、jspからサーブレットにデータを渡す方法についてサポートが必要です。実行するたびに、エラーがキャッチされ、例外が出力されます。java.null.exception..エラーがどこにあるかわかりませんでした..plsが私を助けてくれます...ありがとう..

これが私のコードです:

UpdateProductServlet.java

    try {
        String description = request.getParameter("description");
        float price = Float.parseFloat(request.getParameter("price"));
        String size = request.getParameter("size");
        int aisle_id = Integer.parseInt(request.getParameter("aisle"));
        int id = Integer.parseInt(request.getParameter("id"));

        ProductsDao productsDao = new ProductsDao();
        productsDao.updateProduct(description, price, size, aisle_id, id);

    } catch (Exception e) {
        out.println(e);
    }

と私のProductDao.java

public void updateProduct(String description, float price, String size, int aisle_id, int id) 
        throws ClassNotFoundException, SQLException {
    Connection conn = null;
    PreparedStatement stmt = null;
    String sql = "UPDATE products "
            + "SET description = ?, price = ?, size = ?, aisle_id = ? "
            + "WHERE id = ? ";

    try {
        conn = ConnectionFactory.getConnection();
        stmt = conn.prepareStatement(sql);
        stmt.setString(1, description);
        stmt.setFloat(2, price);
        stmt.setString(3, size);
        stmt.setInt(4, aisle_id);
        stmt.setInt(5, id);
        stmt.executeUpdate();

    } finally {
        if (conn != null) {
            conn.close();
        }

        if (stmt != null){
            stmt.close();
        }
    }
}

これは私のProductById.jspです

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
    <script>
        function functionEdit()
        {
            document.getElementById("edit").type="hidden";
            document.getElementById("update").type="button";
            document.getElementById("delete").type="hidden";
            document.getElementById("cancel").type="button";

            document.getElementById("description").disabled="";
            document.getElementById("size").disabled="";
            document.getElementById("price").disabled="";
            document.getElementById("select").disabled="";
        }

        function functionUpdateRecord(){
            if(confirm('Update existing record?')){
                document.location.href="/MachineProblemWebApp/UpdateProductServlet";
                alert('Update success!');
                document.location.href="/MachineProblemWebApp/GetAllProductsServlet";

            }else{ 
                alert('No changes have been made!');
            }

        }

    </script>
</head>
<body>
    <table border="0">
        <tr>
            <td>id: </td>
            <td><input type="text" name="id" id="id" value="${product.id}" disabled="disabled"></td>
        </tr>
        <tr>
            <td>Description: </td>
            <td><input type="text" name="description" id="description" value="${product.description}" disabled="disabled"></td>
        </tr>
        <tr>
            <td>Aisle </td>
            <td><select name="aisle" disabled="disabled" id="select">
                    <c:forEach var="aisle" items="${aisles}" >
                        <option value="${aisle.id}" ${(aisle.id==product.aisle.id)?"selected" : ""}>${aisle.description}</option>
                    </c:forEach>
                </select></td>
        </tr>
        <tr>
            <td>Size: </td>
            <td><input type="text" name="size" id="size" value="${product.size}" disabled="disabled"></td>
        </tr>
        <tr>
            <td>Price: </td>
            <td><input type="text" name="price" id="price" value="${product.price}" disabled="disabled"></td>
        </tr>
        <tr>
            <td><input type="button" name="edit" id="edit" onClick="functionEdit()" value="Edit" >
                <input type="hidden" name="update" id="update" onClick="functionUpdateRecord()"value="Update">
                <input type="button" name="delete" id="delete" value="Delete">
                <input type="hidden" name="cancel" id="cancel" value="Cancel"></td>
        </tr>
    </table>

</body>

これはスタックトレースですか?Apache Tomcatログに投稿されましたか?

Dec 10, 2012 7:38:13 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [UpdateProductServlet] in context with path     [/MachineProblemWebApp] threw exception
java.lang.NullPointerException
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1008)
at java.lang.Float.parseFloat(Float.java:452)
at grocerific.ui.UpdateProductServlet.processRequest(UpdateProductServlet.java:45)
at grocerific.ui.UpdateProductServlet.doGet(UpdateProductServlet.java:75)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)

Dec 10, 2012 9:36:40 PM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextDestroyed()
Dec 10, 2012 9:36:40 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextDestroyed()
Dec 10, 2012 9:36:46 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextInitialized()
Dec 10, 2012 9:36:46 PM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextInitialized()
Dec 10, 2012 9:36:46 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: attributeAdded('org.apache.jasper.compiler.TldLocationsCache', 'org.apache.jasper.compiler.TldLocationsCache@8a47d9')
4

2 に答える 2

1

あなたはデータを聖霊降臨祭に渡そうとしているようです: document.location.href="/MachineProblemWebApp/UpdateProductServlet";

この行はデータを送信せずに「UpdateProductServlet」にリダイレクトするだけなので、それは不可能です。

データを送信するには、formタグを使用する必要があります。

以下のリンクで、フォームタグを設定する方法を確認できます: http ://www.w3schools.com/html/html_forms.asp

于 2012-12-10T16:49:20.693 に答える
0

スタック トレースは、エラーの場所を示します。

at grocerific.ui.UpdateProductServlet.processRequest(UpdateProductServlet.java:45)

この行だと思います

float price = Float.parseFloat(request.getParameter("price"));

parseFloat に渡す文字列は float ではありません。「1.0」などではなく、「」または「1,0」の場合があります。

アーキテクチャの観点から見ると、あなたは完全に間違った方向に進んでいます。JSP は時代遅れであり、多くの問題を抱えていることが知られているため、非常に困難な道のりを歩んでいるだけです。

JSP の代わりに速度を使用することを検討してください。いくつかの Web アプリ フレームワークを調査することをお勧めします。フォーム処理を非常にうまく処理するものがあります。

于 2012-12-10T16:44:58.467 に答える