2012-06-01 217 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

相關問題