这是我的模特学生
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}渲染每个类中的所有主题
<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>
你好
我知道上面的代码将无法正常工作。我已经试过了
<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.ELException:无法解析表达式 ${class[level]SubjectList}
${class[level]SubjectList}
还是行不通。有什么解决办法吗?提前致谢。
也许您可以设置一个列表列表。这是演示代码。
<%@ 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>
那打印abcdefgh我。要了解语法,请访问http://docs.oracle.com/javaee/7/tutorial/jsf- el004.htm。 编辑:如果在Student类中创建列表列表并在JSTL中使用它,则更好。但是,您可以使用反射来完成您想完成的任务。不好的部分是您必须使用scriptlet(实际上您可以将该代码移至自定义EL函数或标记文件中)。这是演示代码。
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>