且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何获取& lt; c:forEach& gt;中的值的值

更新时间:2022-12-05 13:02:00

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

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>