问候,
我正在尝试从头开始编写我的第一个Java Bean + JSP页面。但是,我正在使用一个填充了任意值的2D数组,我现在在运行JSP时发现异常,说无法找到数组属性:
JSP Exception: javax.el.PropertyNotFoundException: Property 'utilTableVals' not found on type diskUtil.tester
这是我的bean代码:
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
答案 0 :(得分:0)
getter方法应该是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数组。另请参阅Places where JavaBeans are used?这比使用普通数组要清晰,高效且自我记录。
答案 1 :(得分:0)
使getUtilTableVals()
非静态。 <jsp:useBean>
创建tester
的实例。当您在EL表达式中引用它时,它将调用非静态方法。
答案 2 :(得分:0)
类型Tester中的静态方法getUtilTableVals()
应该只能以静态方式访问。只有非静态方法才能在EL表达式中调用。