2008-10-31 34 views
0

我无法在下面的JSP页面中的ArrayList alt中获取正确数目的元素。当我查看JSP时,它显示大小为1(<%=alt.size()%>),当它应该是3时;我想我补充说,法在发电机类的数组,所以我不明白为什么它显示1未在JSP中获得ArrayList的正确大小

这是我的jsp页面:

<% 
    ArrayList<Alert> a = AlertGenerator.getAlert(); 
    pageContext.setAttribute("alt", a); 
%> 
    <c:forEach var="alert" items="${alt}" varStatus="status" > 
     <p>You have <%=alt.size()%> Active Alert(s)</p> 
     <ul> 
     <li><a href="#" class="linkthree">${alert.alert1}</a></li> 
     <li><a href="#" class="linkthree">${alert.alert2}</a></li> 
     <li><a href="#" class="linkthree">${alert.alert3}</a></li> 
     </ul> 
    </c:forEach> 

这是生成类提醒:

package com.cg.mock; 

import java.util.ArrayList; 

public class AlertGenerator { 

    public static ArrayList<Alert> getAlert() { 

     ArrayList<Alert> alt = new ArrayList<Alert>(); 

     alt.add(new Alert("alert1","alert2","alert3")); 

     return alt; 
    } 

} 

这是我的bean类:

package com.cg.mock; 

public class Alert { 
    String alert1; 
    String alert2; 
    String alert3; 
    public Alert(String alert1, String alert2,String alert3) { 
     super(); 
     this.alert1 = alert1; 
     this.alert2 = alert2; 
     this.alert3 = alert3; 
    } 
    public String getAlert1() { 
     return alert1; 
    } 
    public void setAlert1(String alert1) { 
     this.alert1 = alert1; 
    } 
    public String getAlert2() { 
     return alert2; 
    } 
    public void setAlert2(String alert2) { 
     this.alert2 = alert2; 
    } 
    public String getAlert3() { 
     return alert3; 
    } 
    public void setAlert3(String alert3) { 
     this.alert3 = alert3; 
    } 

} 

回答

0

拿到3个警报,你可以重新设计如下注意,只有在那里。 。Alert类的一个属性可以为每个警报创建警报的新实例

package com.cg.mock; 

public class Alert { 
    String alert1; 
    public Alert(String alert1) { 
    super(); 
    this.alert1 = alert1;  
    } 
    public String getAlert1() { 
    return alert1; 
    } 
    public void setAlert1(String alert1) { 
    this.alert1 = alert1; 
    } 
} 

在AlertGenerator:

ArrayList<Alert> alt = new ArrayList<Alert>(); 

alt.add(new Alert("alert1"); 
alt.add(new Alert("alert2"); 
alt.add(new Alert("alert3"); 

return alt; 

而且在JSP:

<p>You have <%=alt.size()%> Active Alert(s)</p> 
<ul> 
<c:forEach var="alert" items="${alt}" varStatus="status" >  

    <li><a href="#" class="linkthree">${alert.alert1}</a></li> 

    </c:forEach> 
</ul> 

通知的UL的是foreach循环之外。

+0

是的..这是一个好主意..感谢您的答复.. – 2008-11-03 05:04:54

1

为什么你希望它返回3当你只有add编辑一项到List

+0

ü可以给我的任何想法,我可以得到它作为jsp页面中的三个.. – 2008-10-31 13:33:32

2

问题是您的ArrayList中只有一个Alert实例,但该单个Alert具有3个属性:alert1,alert2和alert3。

看看行:

alt.add(new Alert("alert1","alert2","alert3")); 

你只需要一个外接线,它是不是在一个循环。

一个可能的解决方案:

public class Alert { 
    private String description; 
    private String status; 
    private Date raisedOn; 
    public Alert(String description, String status) { 
     this.description = description; 
     this.status = status; 
     this.raisedOn = new Date(); 
    } 
    public String getDescription() { return description; } 
    public String getStatus() { return status; } 
    public Date getRaisedOn() { return raisedOn; } 
} 


.... 
alt.add(new Alert("Disk Almost Full", "Warning")); 
alt.add(new Alert("Disk Full", "Severe")); 
... 

... 
<table> 
    <tr><th>Description</th><th>Status</th><th>Raised</th></td> 
    <c:forEach var="alert" items="${alt}"> 
     <tr> 
      <td><c:out value="${alert.description}"/></td> 
      <td><c:out value="${alert.status}"/></td> 
      <td><c:out value="${alert.raisedOn}"/></td> 
     </tr> 
    </c:forEach> 
</table> 
+0

可以给我任何想法,我可以得到它作为三个在jsp页面.. – 2008-10-31 13:35:08

0

ArrayList中仅包含一个元素警报(元素警报包含三个字符串警报

+0

可以给我任何想法,我可以得到它作为三个在jsp页面.. – 2008-10-31 13:36:01

0

改变你的JSP中:

<% 
    ArrayList<Alert> a = AlertGenerator.getAlert(); 
    pageContext.setAttribute("alt", a); 
%> 
<p>You have <%=alt.size()%> Active Alert(s)</p> 
<ul> 
    <c:forEach var="alert" items="${alt}" varStatus="status" > 
     <li><a href="#" class="linkthree">${alert.alert}</a></li> 
    </c:forEach> 
</ul> 

更改AlertGenerator.java到:

package com.cg.mock; 

import java.util.ArrayList; 

public class AlertGenerator { 

    public static ArrayList<Alert> getAlert() { 

     ArrayList<Alert> alt = new ArrayList<Alert>(); 

     alt.add(new Alert("alert2")); 
     alt.add(new Alert("alert2")); 
     alt.add(new Alert("alert3")); 

     return alt; 
    } 
} 

更改Alert.java到:

package com.cg.mock; 

public class Alert { 
    String alert; 
    public Alert(String alert) { 
     this.alert = alert; 
    } 
    public String getAlert() { 
     return alert; 
    } 
    public void setAlert(String alert) { 
     this.alert = alert; 
    } 
} 
+0

是的..谢谢你我完美.. – 2008-11-03 05:33:54