【问题标题】:Trying to implement jstl in jsp from List试图从 List 在 jsp 中实现 jstl
【发布时间】:2018-04-18 09:30:22
【问题描述】:

这是我的 Java 代码:

   List<EmployeeBean>questionList=adao.displayQuestions(eBean,functional_id);
   model.addObject("questionList", questionList);

   Iterator<EmployeeBean> iterator = questionList.iterator();
    while (iterator.hasNext()) {
       String q_id =iterator.next().getSk_question_id();
       System.out.println("QUESTION ID :"+q_id);
       List<EmployeeBean>optionList= adao.displayOptions(eBean,q_id);
       model.addObject("optionList", optionList);
      }

字符串 q_id 将基于第一个列表(questionList)有多个 id。 根据q_id,我会从第二个列表(optionList)中得到多个选项。

这是我在 jsp 中尝试的: 我无法获得 optionList 值。仅获取列表的最后一个值

  <c:forEach var="EmployeeBean" items="${questionList}">
   ${EmployeeBean.question_name }

     <c:forEach var="EmployeeBean" items="${optionList}">
       <div class="col-xs-4 starategy-data">
       <div class="strategy-head">${EmployeeBean.answer_type }</div>
       <p>${EmployeeBean.answer }</p>
       </div>
     </c:forEach>
  </c:forEach>

【问题讨论】:

  • 那你的问题是什么?
  • 我无法获取 optionList 值。只获取列表的最后一个值
  • 您在 while 循环中的每次迭代都重新设置 optionList 属性。意味着您正在更换它。这是一个错误。
  • 如何解决这个问题。我是新来的。请帮帮我

标签: java jsp


【解决方案1】:

一种可能的方式(可能显示不正确,如果q_id没有相关数据列表):

   List<EmployeeBean>questionList=adao.displayQuestions(eBean,functional_id);
   model.addObject("questionList", questionList);

   List<List<EmployeeBean>> resultList = new ArrayList<>();
   Iterator<EmployeeBean> iterator = questionList.iterator();
   while (iterator.hasNext()) {
          String q_id = iterator.next().getSk_question_id();
          System.out.println("QUESTION ID :"+q_id);
          resultList.add(adao.displayOptions(eBean,q_id));//store it by index
   }
   model.addObject("optionList", resultList);

JSP 代码:

 <c:forEach var="EmployeeBean" items="${questionList}" varStatus="status">
   ${EmployeeBean.question_name }

     <c:forEach var="EmployeeBean" items="${optionList.get(status.index)}"><!-- get the related data list -->
       <div class="col-xs-4 starategy-data">
       <div class="strategy-head">${EmployeeBean.answer_type }</div>
       <p>${EmployeeBean.answer }</p>
       </div>
     </c:forEach>
  </c:forEach>

另一种方式(我没试过,你可以测试)

Java 代码:

   List<EmployeeBean>questionList=adao.displayQuestions(eBean,functional_id);
   model.addObject("questionList", questionList);

   int index = 0;
   while (iterator.hasNext()) {
          String q_id = iterator.next().getSk_question_id();
          System.out.println("QUESTION ID :"+q_id);
          model.addObject("optionList_"+index,adao.displayOptions(eBean,q_id));
          index++;
   }

JSP 代码:

<c:forEach var="EmployeeBean" items="${questionList}" varStatus="status">
   ${EmployeeBean.question_name }

     <c:forEach var="EmployeeBean" items="${optionList_status.index}"><!-- not sure if it can work correct here -->
       <div class="col-xs-4 starategy-data">
       <div class="strategy-head">${EmployeeBean.answer_type }</div>
       <p>${EmployeeBean.answer }</p>
       </div>
     </c:forEach>
  </c:forEach>

【讨论】:

  • 试过了,得到了这个异常:javax.servlet.jsp.JspTagException: 不知道如何在<forEach>中迭代提供的“项目”
  • @Manju 对于第一个答案,我不确定q_id 中的一个是否没有数据列表,那么它是否工作正常(它将添加一个空列表)。你需要测试你的自我。
  • 是的,我已经对它进行了测试,它工作正常。谢谢
【解决方案2】:

试试这个:

   List<EmployeeBean>questionList=adao.displayQuestions(eBean,functional_id);
   model.addObject("questionList", questionList);


   List<EmployeeBean>optionList = new ArrayList<>();
   Iterator<EmployeeBean> iterator = questionList.iterator();
   while (iterator.hasNext()) {
          String q_id =iterator.next().getSk_question_id();
          System.out.println("QUESTION ID :"+q_id);
          optionList.addAll(adao.displayOptions(eBean,q_id)); 
   }
   model.addObject("optionList", optionList);

【讨论】:

  • 感谢您的回答,现在只获取 optionList 的第一个值!对于每个 q_id,相同的值都在重复。
  • 顺便说一下,避免使用 _ 并改用驼峰规则 (q_id --> qId)
  • 感谢您的回答
猜你喜欢
  • 1970-01-01
  • 2019-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-06
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多