如何获取& lt; c:forEach& gt;中的值的值 [英] How to get the value of a value in <c:forEach>

查看:66
本文介绍了如何获取& lt; c:forEach& gt;中的值的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的模特学生

public class Student {
    List<Subject1> class1SubjectList=new ArrayList<Subject>();
    List<Subject2> class2SubjectList=new ArrayList<Subject>();
    List<Subject3> class3SubjectList=new ArrayList<Subject>();
    List<Subject4> class4SubjectList=new ArrayList<Subject>();
    List<Subject5> class5SubjectList=new ArrayList<Subject>();
    List<Subject6> class6SubjectList=new ArrayList<Subject>();
    List<Subject7> class7SubjectList=new ArrayList<Subject>();
    List<Subject8> class8SubjectList=new ArrayList<Subject>();
    List<Subject9> class9SubjectList=new ArrayList<Subject>();


}

...............................................................................

...............................................................................

最多有9个类(类数).其范围可以从1到9.我想根据$ {noOfClasses}渲染每个类中的所有主题

There will maximum 9 classes(No of classes).It can differ from 1 to 9.I want to render all subject in each class according to ${noOfClasses}

<c:forEach begin="1" end="${noOfClasses}" varStatus="theCount">
  <select id="selectSunject${theCount.count}onClass">
   <c:forEach items="${class${theCount.count}SubjectList}" var="subject">

       <!-- Looking for class1SubjectList,class2SubjectList,class3SubjectList.. -->

      <option value="${subject.id }" >${subject.name}</option>
   </c:forEach>
  </select>
</c:forEach>

我知道上面的代码将无法工作.我已经尝试过 this

I know the above code wont work. I have tried this

<c:forEach begin="1" end="${noOfClasses}" varStatus="theCount">
 <select id="selectSunject${theCount.count}onClass">
 <c:set var="level" value="${theCount.count}"/>
       <c:forEach items="${class[level]SubjectList}" var="subject">

          <!-- Looking for class1SubjectList,class2SubjectList,class3SubjectList.. -->

          <option value="${subject.id }" >${subject.name}</option>
       </c:forEach>
      </select>
    </c:forEach>

它正在显示...

$ {class [level] SubjectList} 包含无效表达式:javax.el.E​​LException:无法解析表达式 $ {class [level] SubjectList}

${class[level]SubjectList} contains invalid expression(s): javax.el.ELException: Failed to parse the expression ${class[level]SubjectList}

仍然无法正常工作.有什么解决办法吗?预先感谢.

Still not working. any solution for this? Thanks in advance.

推荐答案

也许您可以设置列表的列表.这是演示代码.

Maybe you could set a list of your lists. Here is demonstration code.

<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
    <c:set var="class1SubjectList" value="${['a','b','c']}" />
    <c:set var="class2SubjectList" value="${['d','e','f']}" />
    <c:set var="class3SubjectList" value="${['g','h','i']}" />
    <c:set var="listOfLists" value="${[class1SubjectList,class2SubjectList,class3SubjectList]}" />
    <c:forEach var="currentList" items="${listOfLists}">
        <c:forEach var="currentItem" items="${currentList}">
            ${currentItem}
        </c:forEach>  
    </c:forEach>

这将打印出一个b c d e f g h i.要了解语法,请参见 http://docs.oracle.com/javaee/7/tutorial/jsf-el004.htm
如果您在Student类中创建列表列表并在JSTL中使用它会更好.但是,您可以使用反射来完成您想完成的任务.不好的部分是您必须使用scriptlet(实际上您可以将该代码移至自定义EL函数或标记文件中).这是演示代码.

That prints a b c d e f g h i. To understand syntax look at http://docs.oracle.com/javaee/7/tutorial/jsf-el004.htm
It would better if you created a list of lists in your Student class and use that in your JSTL. But, you can use reflection to do what you want to accomplish. The bad part is that you must use a scriptlet(actually you could move that code into a custom EL function or a tag file). Here is demonstration code.

package test;
import java.util.*;
public class Student {
    public List<String> class1SubjectList = new ArrayList<String>();
    public List<String> class2SubjectList = new ArrayList<String>();
    public List<String> class3SubjectList = new ArrayList<String>();
    public Student(){
        class1SubjectList.add("a");
        class1SubjectList.add("b");
        class1SubjectList.add("c");
        class2SubjectList.add("d");
        class2SubjectList.add("e");
        class2SubjectList.add("f");
        class3SubjectList.add("g");
        class3SubjectList.add("h");
        class3SubjectList.add("i");
    }
}

和JSP

<%@ page import="test.Student, java.lang.reflect.Field, java.util.*" %>
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<%
    Student student = new Student();
    Field[] fields = student.getClass().getFields();
    List<List<String>> listOfLists = new ArrayList<List<String>>();
    for(Field field: fields){
        listOfLists.add((List)field.get(student));
    }
    pageContext.setAttribute("listOfLists", listOfLists);
%>
<c:forEach items="${listOfLists}" var="subjectList" varStatus="theCount">
    <select id="selectSubject${theCount.count}onClass">
        <c:forEach var="currentItem" items="${subjectList}">
            <option value="${currentItem}" >${currentItem}</option> 
        </c:forEach>
    </select>
</c:forEach> 

这篇关于如何获取&amp; lt; c:forEach&amp; gt;中的值的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆