【问题标题】:JSP access methods of objects in a list列表中对象的JSP访问方法
【发布时间】:2013-07-02 04:03:05
【问题描述】:

我有 2 个 java 类。一个是 java bean,另一个是这个 java bean 类的实例集合。

public class Quiz{ 
  private int id;
  private String title;
  //getters and setters 
}

public class Quizzes{
  List<Quiz> quizList = new ArrayList<Quiz>;
  public Quizzes{
    //constructor to add Quiz objects to quizList
    Quiz curQuiz = new Quiz();
    ...
  }
  public List<Quiz> getQuizList(){
    return this.quizList;
  }

}

在我的 JSP 中,我想访问例如测验的 ID(或标题)。我怎样才能做到这一点?我唯一的想法是遍历 quizlist 中的对象并调用 getId 方法,然后将此整数值添加到列表中。比如这样:

public List<Integer> getId(){
    List<Integer> idList = new ArrayList<Integer>();
    ListIterator<Quiz> ir = quizlist.listIterator();
    int id;
    while (ir.hasNext()){
        Quiz curQuiz = ir.next();
        id = curQuiz.getId();
        idList.add(id);
    }
    return idList;
}

但是没有更好的解决方案吗?

【问题讨论】:

  • 你想要完成什么?
  • 我有这个 quizList (ArrayList of Quiz objects)。在我的 JSP 中,我想从我的 quizList 中输出每个 Quiz 对象的 ID。

标签: java jsp object arraylist


【解决方案1】:

您可以查看&lt;jsp:useBean&gt; 标签。相同的语法是

<jsp:useBean id= "attributeName" scope= "page | request | session | application" class= "yourPackage.yourClass"> </jsp:useBean>.

这里attributeName 是您在page, request, session or application scope 中设置的属性名称。 yourPackage.yourClass 是您的 beanClass,即 Quiz 如果您想访问 Quiz 成员变量。

你可以找到很好的例子here

如果你想遍历一个可以在jsp中访问的列表,那么你可以使用forEach标签。

<c:foreach jsp iterate over list

<c:forEach var="window" items="${requestScope.quizList}">
    <c:out value="${quiz.id}"/> 
    <c:out value="${quiz.name}"/>
</c:forEach>

【讨论】:

  • 我知道这个标签,但不知道在这种情况下如何使用它。 &lt;jsp:useBean id="quiz" class="Quiz"/&gt; 然后我可以访问${quiz.id} 但问题是我只有这个 quizList (带有测验对象的列表)。如果我使用&lt;jsp:useBean id="quizzes" class="Quiz"/&gt;,我将只能访问一个 Quiz 对象,但我想访问一个属性,例如一个测验的 id 或标题。
  • 我已根据您的说明编辑了答案。您可以使用forEach 标签来遍历列表
  • 谢谢,我认为问题是,我实际上没有测验类的实例。这些对象只保存在 quizList 中。如果我尝试&lt;c:forEach items="${quizList}"&gt; &lt;c:out value="${quiz.id}"/&gt; Test&lt;br&gt; &lt;/c:forEach&gt; 我不会出错!而且我的 JSP 包含两次“Test”这个词,这没关系,因为在我的 quizList 中有两个 Quiz 对象。在我的 JSP 的头部我有两个:&lt;jsp:useBean id="quizzes" class="Quizzes" scope="request"/&gt; &lt;jsp:useBean id="quiz" class="Quiz" scope="request"/&gt;你明白这个问题吗?
  • 我找到了解决方案:在 JSP 的头部,我在迭代 &lt;c:forEach items="${quizList}" varStatus="status"&gt; ${quizzes.quizlist[status.index].id} &lt;/c:forEach&gt; 时同时使用 &lt;jsp:useBean id="quizzes" class="Quizzes" scope="request"/&gt; &lt;jsp:useBean id="quiz" class="Quiz" scope="request"/&gt;
【解决方案2】:

如果您只需要每次测验的 Id,您可以覆盖测验中的 toString() 函数:

public class Quiz{ 
  private int id;
  private String title;
  //getters and setters 
}

public class Quizzes{
  List<Quiz> quizList = new ArrayList<Quiz>;
  public Quizzes{
    //constructor to add Quiz objects to quizList
    Quiz curQuiz = new Quiz();
    ...
  }
  public List<Quiz> getQuizList(){
    return this.quizList;
  }

   @Override 
   public String toString(){
return getId();
  }

}

这样,当你调用 toString() 时,它会返回适当的 Id:

Quiz.toString(); 

您可以将迭代更改为:

public List<Integer> getId(){
    List<Integer> idList = new ArrayList<Integer>();
    ListIterator<Quiz> ir = quizlist.listIterator();
    while (ir.hasNext()){
        idList.add(ir.next().toString());
    }
    return idList;
}

【讨论】:

  • 谢谢,但实际上测验有几个我想访问的属性
猜你喜欢
  • 2014-11-14
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 2016-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多