2012-06-01 523 views
2

我之前使用scriptlets,但现在我切换到了mvc。我不能够检索到JSP页面,并得到错误的值:javax.el.PropertyNotFoundException:在类型java.lang.String上找不到属性'tname'

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> 
+0

我有一个快速的问题,我还没有和支柱的工作,但你应该不是属性添加到响应。我看到你在请求中添加它。 – raddykrish

+0

@raddy没有,属性被设置为请求进行内部通信,然后请求只是转发 –

+0

谢谢@JigarJoshi因为.. – raddykrish

回答

1

替代JSTL我想你要添加的名称和费用直接给ArrayList,但是你应该在arraylist中加入整个regForm对象。

,而不是下面的代码

myBeans.add(reg.getTname()); 
myBeans.add(reg.getTfee()); 

你需要做的像

myBeans.add(reg); 

而且不使用你从形式得到了相同的对象。尝试创建新对象并添加数组列表并尝试使用泛型。

编辑:

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); 
    } 
+0

我想这 – Maninder

+0

输出是这样的垂直方式这里不能正常显示,但希望你得到这个 名称\t收费 生殖激素\t 50.00 生殖激素\t 50.00 生殖激素\t 50.00 生殖激素\t 50.00 生殖激素\t 50.00 生殖激素\t 50.00 生殖激素\t 50.00 Reproduct ive荷尔蒙\t 50.00 – Maninder

+1

请参阅我的新编辑。这就是我提到你需要为每条记录创建新对象并将其添加到列表中的原因。在之前的代码中,您使用的是表单中的引用,并且您正在设置该相同的对象。由于您正在更改引用中的值,因此它将更新列表中的所有对象。希望这可以帮助。 – raddykrish

5

其实哟u的添加在您的Collection字符串和你正在试图通过${reg.tname}

要么调用

getTName()全豆到您的收藏添加或只是${reg}

+0

Thanx很多Jigar Joshi – Maninder

+0

欢迎您 –

+0

如果我用$ {REG}那么输出类似 名称\t费代替JSTL 氨\t氨 420.00 \t 420.00淀粉\t淀粉 250.00 \t 250.00 反d滴度\t反d滴度 350.00\t 350.00 – Maninder

相关问题