javax.el.PropertyNotFoundException:Property';t名称';在类型java.lang.String上找不到
我以前使用Scriptlet,但现在我切换到mvc。我无法检索JSP页面上的值,并出现错误:javax.el.PropertyNotFoundException:Property';t名称';在类型java.lang.String上找不到,java,jsp,struts,jstl,el,Java,Jsp,Struts,Jstl,El,我以前使用Scriptlet,但现在我切换到mvc。我无法检索JSP页面上的值,并出现错误: javax.el.PropertyNotFoundException: Property 'tname' not found on type java.lang.String Bean的代码: public class regForm extends org.apache.struts.validator.ValidatorForm implements Iprafunctions { pr
javax.el.PropertyNotFoundException: Property 'tname' not found on type java.lang.String
Bean的代码:
public class regForm extends org.apache.struts.validator.ValidatorForm implements Iprafunctions {
private String tname = null;
private String tfee = null;
public String getTfee() {
return tfee;
}
public void setTfee(String tfee) {
this.tfee = tfee;
}
public String getTname() {
return tname;
}
public void setTname(String tname) {
this.tname = tname;
}
public regForm() {
super();
}
}
动作控制器:
public ActionForward mvc(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
regForm reg = (regForm) form;
String sql = "Select tname,tfee from addtest order by tname";
ResultSet rs = SQLC.getData(sql, null);
Collection myBeans = new ArrayList();
while (rs.next()) {
String testname = rs.getString("tname");
String testfee = rs.getString("tfee");
reg.setTname(testname);
reg.setTfee(testfee);
myBeans.add(reg.getTname());
myBeans.add(reg.getTfee());
}
request.setAttribute("myBeans", myBeans);
return mapping.findForward(SUCCESS);
}
JSP页面中的访问
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<table>
<tr><td>Name</td><td>Fee</td></tr>
<c:forEach var="reg" items="${myBeans}">
<tr>
<td><c:out value="${reg.tname}"></c:out></td>
<td><c:out value="${reg.tfee}"></c:out></td>
</tr>
</c:forEach>
</table>
名费
实际上,您正在集合中添加字符串,并试图调用
getTName()
by${reg.tname}
要么将整个bean添加到集合中,要么将JSTL替换为${reg}
我认为您是将名称和费用直接添加到arraylist中,但您应该将整个regForm
对象添加到arraylist中
而不是下面的代码
myBeans.add(reg.getTname());
myBeans.add(reg.getTfee());
你需要像这样做
myBeans.add(reg);
此外,不要使用从表单中获得的相同对象。尝试创建新对象并添加到arraylist中,并尝试使用泛型
编辑:
while (rs.next()) {
String testname = rs.getString("tname");
String testfee = rs.getString("tfee");
regForm beanObject = new regForm();
beanObject.setTname(testname);
beanObject.setTfee(testfee);
myBeans.add(beanObject);
}
我有一个简单的问题,我没有使用struts,但是您是否应该在响应中添加属性。我看到你在请求中添加了它。@raddy不,属性被设置为请求进行内部通信,然后请求被转发Hanks@JigarJoshi。因为我们正在发送请求并设置属性值,所以我们将得到响应。输出是这样的,以垂直方式在这里没有正确显示,但希望您得到这个名称50.00生殖激素50.00生殖激素50.00生殖激素50.00生殖激素50.00生殖激素50.00生殖激素50.00生殖激素50.00生殖激素50.00请参阅我的新编辑。这就是我提到的需要为每条记录创建新对象并将其添加到列表中的原因。在前面的代码中,您使用了表单中的引用,并且在同一个对象中进行了设置。由于您正在更改引用中的值,因此列表中所有对象的引用都将更新。希望这有帮助。如果我用${reg}替换JSTL,那么输出就像名称费氨氨420.00 420.00淀粉酶淀粉酶250.00 250.00抗D滴度抗D滴度350.00 350.00这是因为您现在添加了整粒豆子,请重新阅读我的答案,或者干脆将其设置为${reg}
或者如果您将bean添加到集合中,则不要更改JSP内容这是我在JSP页面中只做了更改时的输出。。。。当我将整个bean添加到集合中,并且JSP页面中没有任何更改时,我会在上面的回答中得到一条注释,然后您在属性中设置了错误的内容,尝试调试这些属性很好。。。。正如您在上面的输出中看到的,相同的tname和tfee打印了10次,而不是不同的tname和tfee