Первая страница JSP - Использование 2D-массива - Страница не заполняется - PullRequest
1 голос
/ 06 июня 2011

Привет,

Я пытаюсь написать свою первую страницу Java Bean + JSP с нуля.Однако я использую двумерный массив, который заполнен произвольными значениями, и теперь я получаю исключение при запуске JSP, в котором говорится, что свойство массива не может быть найдено:

JSP Exception: javax.el.PropertyNotFoundException: Property 'utilTableVals' not found on  type diskUtil.tester

Вот мойкод бина:

package diskUtil;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.*;
import java.lang.*;
import java.io.*;


public class tester{

//public String [][] utilTableVals;

String [][] utilTableVals = new String[20][20];

/***
bean's properties accessor
***/

/*public String[][] getUtilTableVals() { 
                return utilTableVals;
        }*/


public static String[][] getUtilTableVals()throws Exception{

tester du1 = new tester();
//String [][] utilTableVals = new String[20][20];

int i=0;
int j=0;

int row=0;
int col=0;
int result=0;


for(int r = 0; r < du1.utilTableVals.length; r++)
 {
     for(int c = 0 ; c < du1.utilTableVals[r].length; c++)
     {
        result = r+c;
          du1.utilTableVals[r][c]=Integer.toString(result);
         //System.out.print(" " + utilTableVals[r][c]);
     }
}

return du1.utilTableVals;

}//end getUtilTableVals

Мой JSP-код здесь:

<%@ page contentType="text/html" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<hmtl>
<head>
<title>Disk Utilization Page</title>
</head>
<body>
<h1>DISK UTILZATION REPORT</h1>
<br>

<jsp:useBean id="diskUtilData" scope="request" class="diskUtil.tester" />

<table>
<c:forEach var="celldata" items="${diskUtilData.utilTableVals}">
        <tr>
        <c:forEach var="col" items="${celldata}">
                <td>
                <c:out value="${col}" />
                ${col}
                <p>hello</p>
                </td>
        </c:forEach>
</c:forEach>
        </tr>


</table>
</body>
</html>

Может кто-нибудь взглянуть?Заранее спасибо.

-TU

Ответы [ 3 ]

0 голосов
/ 06 июня 2011

Сделать getUtilTableVals() не статичным.<jsp:useBean> создает экземпляр из tester.Когда вы ссылаетесь на него в выражении EL, он вызывает нестатический метод.

0 голосов
/ 06 июня 2011

Статический метод getUtilTableVals() из тестера типов должен быть доступен только статическим способом. Только не статические методы получают вызов в вашем выражении EL.

0 голосов
/ 06 июня 2011

Метод получения должен быть public и не static.Вы также должны выполнять заполнение в конструкторе или методе действия bean-компонента, а не в getter.

public class Tester { // Classnames ought to start with uppercase.

    private String[][] utilTableVals; // Properties ought to be private.

    public Tester() {
        utilTableVals = new String[20][20];
        // ... Preparing ought to be done in the constructor.
    }

    public String[][] getUtilTableVals() { // Getter ought to be public and non-static.
        return utilTableVals; // Getter should do nothing more than just returning property.
    }

}

Наконец, я настоятельно рекомендую использовать коллекцию Javabeans вместо 2D-массива.См. Также Места, где используются JavaBeans? Это намного более понятно, эффективно и самодокументировано, чем использование простых массивов.

...