0

さて、最初に、私はWebデザインにかなり慣れていません。しかし、私のプロジェクトでは、多数のデータベースのテーブルに基づいて複数のドロップダウンを設定するページを作成するように依頼されました。そして、私はこの部分が機能するようになったと信じています。これまでのコード(jspページ)を見てください。

CodeSelector.jsp

<%@page import="java.sql.*"%>
<!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>Codes Page</title>
        </head>
        <body>
            <form name = "codes" method = "POST" action="....." target="_self">
                <h1>Please select the applicable codes:</h1>
                <select name='code1' onchange="showState(this.value)">  
                <option value="none">Code One: None</option>  
                <%
                    String debug = "ON";

                    if(debug.equals("ON"))
                    {
                        System.out.println("***DEBUGGING IS TURNED ON!!!***");
                    }

                    //Pulls the ids and descriptions from the first codes table and stores them in the first drop down
                    try
                    {
                        String caseId = request.getParameter("caseID");
                        //caseId = "30";

                        if (caseId == null)
                        {
                            //debug
                            System.out.println("The caseID is NULL!");

                            Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();  
                            Connection con = DriverManager.getConnection("jdbc:oracle:thin:@url:sid","username","password");  
                            Statement stmt = con.createStatement();  
                            ResultSet rs = stmt.executeQuery("select id, descr from case_codes");
                            String tempString;

                            while(rs.next())
                            {
                                //If the code description is more than 125 characters long, truncate the string and append "..." to the end of it.
                                if (rs.getString(2).length() > 125)
                                {
                                    tempString = rs.getString(2).substring(0, 125);
                                    %>
                                        <option value="<%=rs.getString(1)%>"><%=rs.getString(1)%> <%=tempString%>...</option>  
                                    <%
                                }
                                //Else just insert the whole description into the option field.
                                else
                                {
                                    %>
                                        <option value="<%=rs.getString(1)%>"><%=rs.getString(1)%> <%=rs.getString(2)%></option>  
                                    <%
                                }

                            }

                            //Closes the database connection
                            stmt.close();
                            con.close();
                        }
                        else if (caseId != null)
                        {
                            if(debug.equals("ON"))
                            {
                                System.out.println("The caseID is NOT NULL!");
                            }

                            Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();  
                            Connection con = DriverManager.getConnection("jdbc:oracle:thin:@url:sid","username","password");  
                            Statement stmt = con.createStatement();

                            //Returns a list of all the tables and views in the database
                            if(debug.equals("ON"))
                            {
                                DatabaseMetaData meta = con.getMetaData();
                                ResultSet res = meta.getTables(null, null, null, new String[] {"TABLE"});

                                while (res.next()) 
                                {
                                    System.out.println(
                                        "   "+res.getString("TABLE_CAT") 
                                       + ", "+res.getString("TABLE_SCHEM")
                                       + ", "+res.getString("TABLE_NAME")
                                       + ", "+res.getString("TABLE_TYPE")
                                       + ", "+res.getString("REMARKS")); 
                                 }
                            }

                            if(debug.equals("ON"))
                            {
                                System.out.println("BEFORE SQL Statement: select id from cases");
                            }

                            //Returns a result set of all the ids in the cases table
                            ResultSet rs = stmt.executeQuery("select id from cases");

                            if(debug.equals("ON"))
                            {
                                System.out.println("AFTER SQL Statement: select id from cases");
                            }

                            while(rs.next())
                            {
                                if(debug.equals("ON"))
                                {
                                    System.out.println("The rs is: " + rs.getString(1));
                                }

                                if(rs.getString(1).equals(caseId))
                                {
                                    if(debug.equals("ON"))
                                    {
                                        System.out.println("Case ID Found!");
                                    }

                                    ResultSet rs2 = stmt.executeQuery("select rlawcd_id, display_seq from cs_rlawcd where cs_id = " + caseId);

                                    while(rs2.next())
                                    {
                                        if(debug.equals("ON"))
                                        {
                                            System.out.println("Inside rs2 while loop");

                                        }

                                        //If no values are returned in the rlawcd table, populate the drop down as you normally would
                                        if (rs2 == null)
                                        {
                                            if(debug.equals("ON"))
                                            {
                                                System.out.println("Inside rs2 IF");
                                                System.out.println("rs2 = null");
                                            }

                                            ResultSet rs3 = stmt.executeQuery("select id, descr from case_codes");
                                            String tempString;

                                            while(rs3.next())
                                            {
                                                //If the code description is more than 125 characters long, truncate the string and append "..." to the end of it.
                                                if (rs3.getString(2).length() > 125)
                                                {
                                                    tempString = rs3.getString(2).substring(0, 125);
                                                    %>
                                                        <option value="<%=rs3.getString(1)%>"><%=rs3.getString(1)%> <%=tempString%>...</option>  
                                                    <%
                                                }
                                                //Else just insert the whole description into the option field.
                                                else
                                                {
                                                    %>
                                                        <option value="<%=rs3.getString(1)%>"><%=rs3.getString(1)%> <%=rs3.getString(2)%></option>  
                                                    <%
                                                }

                                            }
                                        }
                                        //Else if the values are indeed returned and the display sequence equals 1
                                        //populate the drop downs normally but with the returned values set as the selected/default items
                                        else if(rs2.getString(2).equals("1"))
                                        {
                                            if(debug.equals("ON"))
                                            {
                                                System.out.println("Inside rs2 ELSE IF");
                                                System.out.println("The rs2 is NOT NULL!");
                                            }

                                            String codeID = rs2.getString(1);

                                            ResultSet rs3 = stmt.executeQuery("select id, descr from case_codes");
                                            String tempString;

                                            while(rs3.next())
                                            {
                                                if(debug.equals("ON"))
                                                {
                                                    System.out.println("Inside rs3 while loop");
                                                }

                                                if (rs3.getString(1).equals(codeID))
                                                {
                                                    if(debug.equals("ON"))
                                                    {
                                                        System.out.println("Inside rs3 IF");
                                                        System.out.println("A matching law code was found!");
                                                    }

                                                    //If the code description is more than 125 characters long, truncate the string and append "..." to the end of it.
                                                    if (rs3.getString(2).length() > 125)
                                                    {
                                                        tempString = rs3.getString(2).substring(0, 125);
                                                        %>
                                                            <option selected="<%=rs3.getString(1)%>"><%=rs3.getString(1)%> <%=tempString%>...</option>  
                                                        <%
                                                    }
                                                    //Else just insert the whole description into the default/selected option field.
                                                    else
                                                    {
                                                        %>
                                                            <option selected="<%=rs3.getString(1)%>"><%=rs3.getString(1)%> <%=rs3.getString(2)%></option>  
                                                        <%
                                                    }       
                                                }
                                                else
                                                {
                                                    //If the code description is more than 125 characters long, truncate the string and append "..." to the end of it.
                                                    if (rs3.getString(2).length() > 125)
                                                    {
                                                        tempString = rs3.getString(2).substring(0, 125);
                                                        %>
                                                            <option value="<%=rs3.getString(1)%>"><%=rs3.getString(1)%> <%=tempString%>...</option>  
                                                        <%
                                                    }
                                                    //Else just insert the whole description into the option field.
                                                    else
                                                    {
                                                        %>
                                                            <option value="<%=rs3.getString(1)%>"><%=rs3.getString(1)%> <%=rs3.getString(2)%></option>  
                                                        <%
                                                    }       
                                                }
                                            }
                                        }
                                        else
                                        {
                                            if(debug.equals("ON"))
                                            {
                                                System.out.println("Inside the rs2 ELSE");
                                                System.out.println("Something must have gone wrong.");
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    //do nothing...
                                }
                            }
                            //Closes the database connection
                            stmt.close();
                            con.close();
                        }
                        else
                        {
                            //debug
                            System.out.println("Something weird happened.");
                        }

                    }
                    catch (ClassNotFoundException e)
                    {
                        System.err.println("ClassNotFoundException: " + e.getMessage());
                    } 
                    catch (SQLException e)
                    {
                        System.err.println("SQLException: " + e.getMessage());
                    }
                    catch (Exception e)
                    {
                        System.err.println("Generic Exception: " + e.getMessage());
                    }       
                %>
                </select>
                <br>
                <br>
                <input type="submit" value="Submit">
              </form>
          </body> 
      </html>

ただし、ここで、ユーザーが上からドロップダウンボックスで選択した内容に基づいて、updateステートメントとinsertステートメントを使用してデータベースを更新する機能を追加する必要があります。繰り返しになりますが、これはかなり新しいので、これを行うための最善の方法がわかりません。私がグーグルで見つけたものの多くは、この機能が主にコードのこの部分に関係していることを示唆しています:

<form name = "codes" method = "POST" action="...." target="_self">

そして、オンラインの例の多くは、別のphpページを使用することを示唆しているようですか?しかし、2つがどのように相互にリンクされているのか、1つのページのコンテンツが他のページと更新するデータベースとの間でどのように転送されるのかをよく理解していませんでした。submitこの経験のある人は、ここでアドバイスを提供したり、ボタンがクリックされたときにデータベースに書き込むことができるようにするために次に何をしたいのかについて正しい方向に向けてくれますか?

4

1 に答える 1

1

さて、最初のものはHTTPポストです。フォームを特別なページに送信します。選択したアイテムをリクエストパラメータ内に取得します。

したがって<form ... >...</form>、jspにつながるアクションを作成します。これで、フォームを送信した後にパラメータを取得できます。

アクションはaction="./CodeSelector.jsp"

今あなたのコードに関するいくつかの批評家:

  1. 長い間、動作をある種のform.jspと別のstore.jspに分割することをお勧めします。コードの概要を把握するには、コードを分割する必要があります。
  2. 決して、 NO CIRCUMSTANCESの下でrequest-parameterを取り、それらをクエリに追加してください。これは深刻なセキュリティリスクにつながります。これから始めないでください。常にPreparedStatementを使用し、パラメーターを設定します。これにより、 SQLインジェクションの観点から安全なクエリが実行されます。
  3. Javaを利用したWebサイトを作成するためのより最新のフレームワークについて考えてみてください。私はJavaServerFacesGWTを使用しました。あなたはもっと学ぶ必要がありますが、コードには信じられないほど少ないです(私は思います)。

単一のJSPページは、一度テストできない書き込みにつながります。コードを理解することはありません。最新のフレームワーク、またはJSPとCDIを使用すると、コードをGUI(JSP)とロジック(Java)に分割できます。

于 2012-10-29T19:12:34.527 に答える