データベースエントリが設定された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"プレフィックスを削除すると、例外が解決されたようです。ただし、存在するはずの情報は空白です。