这是我的模特学生
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>
您好,
我知道上面的代码不会工作。我试过了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.ELException:无法解析表达式${class[level]SubjectList}
仍然无法正常工作。对此有何解决方案?提前谢谢。
答案 0 :(得分:1)
也许您可以设置列表清单。这是演示代码。
<%@ 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函数或标记文件中)。这是演示代码。
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>