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

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

问题描述

这是我的模特学生

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


}

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



最多9班(班级数)从1到9.我想根据$ {noOfClasses}来呈现每个类的所有主题。

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

<! - 寻找class1SubjectList,class2SubjectList,class3SubjectList .. - >

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



代码不会工作。我已经尝试这个

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

<! - 寻找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}


任何解决方案?提前致谢。

解决方案

也许你可以设置你的列表的列表。

 <%@ taglib prefix =curi =http://java.sun。 com / jsp / jstl / core%> 
< c:set var =class1SubjectListvalue =$ {['a','b','c']}/>
< c:set var =class2SubjectListvalue =$ {['d','e','f']}/>
< c:set var =class3SubjectListvalue =$ {['g','h','i']}/>
< c:forEach var =currentListitems =$ {listOfLists}>
< c:forEach var =currentItemitems =$ {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);


code
$ b $和$ j

 <%@ page import =test.Student,java.lang.reflect.Field,java.util。*%> 
<%@ taglib prefix =curi =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 =subjectListvarStatus =theCount>
< select id =selectSubject $ {theCount.count} onClass>
< c:forEach var =currentItemitems =$ {subjectList}>


This is my model Student

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>();


}

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

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>

Hi,

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>

It is showing...

${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>

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
Edit: 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");
    }
}

and the 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> 

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

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