2008-10-31 6 views
0

У меня возникли проблемы с получением правильного количества элементов в ArrayList alt на странице JSP ниже. Когда я просматриваю JSP, он показывает размер 1 (<%=alt.size()%>), когда он должен быть 3; Я думаю, что я добавляю этот метод в массив в классе генератора, так что я не понимаю, почему он показывает 1.Не получить правильный размер ArrayList в JSP

Это моя страница 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; 
    } 

} 

Это мой боб класс:

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 оповещения вы можете перепроектировать следующим образом Обратите внимание, что есть только. . одно свойство оповещения класса Вы можете создать новый экземпляр предупреждения для каждого предупреждения

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> 

Обратите внимание на ул находятся вне цикла 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

Смежные вопросы