2017-02-25 9 views
0

データベースエントリが設定されたArrayListを使用して、サーバー上のjsp Webページを埋めようとしています。私はこれを動作させるために複数のソリューションを試してきましたが、何も出てこなかった。javax.el.PropertyNotFoundException:クラス[servlets.Controller]で[resultRow]という名前のpublic staticフィールドが見つかりませんでした。

私の変数は、そのように宣言されています

Connection con = null; 
Statement stmt = null; 
private static ResultSet result = null; 
Statement stmt2 = null; 
private static ResultSet inventory = null; 
public static ArrayList<String> dbEntries = new ArrayList<String>(); 

私はinitメソッドを持って、宣言し、そのように走っ:

public void init(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 
    new CreateCharacters(); 
    new CreateInventories(); 

    try 
    { 
     Properties props = new Properties(); 
     props.load(new FileInputStream("WebContent" + File.separator + "files" + File.separator + "dbprops.properties")); 


     Class.forName(props.getProperty("Driver")); 
     con = DriverManager.getConnection(props.getProperty("URL"), props); 

     stmt = con.createStatement(); 
     result = stmt.executeQuery("SELECT * FROM Characters_"); 
     stmt2 = con.createStatement(); 
     inventory = stmt2.executeQuery("SELECT * FROM Inventories_ AS i LEFT JOIN Characters_ AS c ON i.characterID=c.characterID"); 
     while(result.next()) 
     { 
      dbEntries.add(String.valueOf(result.getInt(1))); // characterID 
      dbEntries.add(result.getString(2));     // playerName 
      dbEntries.add(result.getString(3));     // characterName 
      dbEntries.add(String.valueOf(result.getInt(4))); // STR 
      dbEntries.add(String.valueOf(result.getInt(5))); // CON 
      dbEntries.add(String.valueOf(result.getInt(6))); // DEX 
      dbEntries.add(String.valueOf(result.getInt(7))); // INT 
      dbEntries.add(String.valueOf(result.getInt(8))); // WIS 
      dbEntries.add(String.valueOf(result.getInt(9))); // CHA 
      request.setAttribute("resultRow", dbEntries); 
      dbEntries.clear(); 
     } 
     while(inventory.next()) 
     { 
      dbEntries.add(String.valueOf(inventory.getInt(1)));  // inventoryId 
      dbEntries.add(String.valueOf(inventory.getInt(2))); // characterId 
      dbEntries.add(inventory.getString(3));     // mainHand 
      dbEntries.add(inventory.getString(4)); // offHand 
      dbEntries.add(inventory.getString(5)); // armor 
      dbEntries.add(inventory.getString(6)); // carryMass 
      dbEntries.add(inventory.getString(7)); // contents 
      request.setAttribute("resultInventory", dbEntries); 
      dbEntries.clear(); 
     } 
     RequestDispatcher dispatch = request.getRequestDispatcher("/index.jsp"); 
     dispatch.forward(request, response); 
    } catch (ClassNotFoundException ex) { 
     ex.printStackTrace(); 
    } catch (SQLException ex) { 
     ex.printStackTrace(); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
} 

は、これは、2つのスコープの変数を作成することになっている - resultRowとresultInventoryを。ここで

は、問題の原因JSPスニペットです:

<tr class = dbCharacters> 
     <td><input type=text name='ID${Controller.resultRow[0]}' form ='currentCharacter' value='${Controller.resultRow[0]}'></td> 
     <td><input type=text name='Player${Controller.resultRow[0]}' form ='currentCharacter' value='${Controller.resultRow[1]}'></td> 
     <td><input type=text name='Character${Controller.resultRow[0]}' form ='currentCharacter' value='${Controller.resultRow[2]}'></td> 
     <td><input type=text name='Strength${Controller.resultRow[0]}' form ='currentCharacter' value='${Controller.resultRow[3]}'></td> 
     <td><input type=text name='Constitution${Controller.resultRow[0]}' form ='currentCharacter' value='${Controller.resultRow[4]}'></td> 
     <td><input type=text name='Dexterity${Controller.resultRow[0]}' form ='currentCharacter' value='${Controller.resultRow[5]}'></td> 
     <td><input type=text name='Intelligence${Controller.resultRow[0]}' form ='currentCharacter' value='${Controller.resultRow[6]}'></td> 
     <td><input type=text name='Wisdom${Controller.resultRow[0]}' form ='currentCharacter' value='${Controller.resultRow[7]}'></td> 
     <td><input type=text name='Charisma${Controller.resultRow[0]}' form ='currentCharacter' value='${Controller.resultRow[8]}'></td> 
     <td><button onclick = 'ShowInventory(${Controller.resultRow[0]})'>Inventory</button></td> 
     <td><input type=submit form = 'currentCharacter' value=Update name='Update${Controller.resultRow[0]}'></td> 
     <td><input type=submit form = 'currentCharacter' value=Delete name='Delete${Controller.resultRow[0]}'></td> 
    </tr> 

しかし、私のJSPは単にresultRowとresultInventoryを読むことを拒否します。私はこれを動作させるために複数のソリューションを試しました:doGet()メソッドにinitコードを移動するのと同じ結果が得られます:

  • dbEntries.clear()ステートメントが削除されても、 "dbEntries"を使用するとエラーは発生しませんが、テーブルは空白になります。

更新:私はエラーの理由を推測していると思います。 JSP ELは、Controller.resultRow/resultInventoryを使用すると、resultRow/resultInventoryという名前の実際の変数を検索しようとしています。ただし、属性はそのように格納されません。 "Controller"プレフィックスを削除すると、例外が解決されたようです。ただし、存在するはずの情報は空白です。

答えて

0

問題は解決されました。

私が間違っていたのは、私のブラウザからJSPを直接ロードしていたことで、私のサーブレットが呼び出されていないことを意味していました!この問題を解決するために、jspの名前を「output.jsp」(それは文字通り何でも構いません)に変更し、スタートアップページ(index.html)を作成しました。 htmlは、サーブレットにGETリクエストを送信するように書かれ、サーブレットはJSPにディスパッチされます。

関連する問題