如何根据foreach循环中的变量填充类中的字段?
<c:forEach var="i" begin="1" end="#{resource.numberOfSkills}">
<h:panelGrid columns="2" cellpadding="5">
*Here my problem* ---> <h:selectOneMenu value="#{**skills.skillFromSelectList${i}**}">
<f:selectItem itemLabel="Comp" itemValue="" />
<f:selectItems value="#{skills.listOfTitlesOfSkills}"/>
</h:selectOneMenu>
<p:rating value="#{skills.levelSkill}"/>
</h:panelGrid>
</c:forEach>
在我的技能课程中(与技能课程不同):我有字段:
private Skill skillFromSelectList1;
private Skill skillFromSelectList2;
private Skill skillFromSelectList3;
private Skill skillFromSelectList4;
private Skill skillFromSelectList5;
private Skill skillFromSelectList6;
我想用{ skills.skillFromSelectList $ {i} }“&gt;来填充每个字段。因此,对于第一个循环,所选项目将放入skillFromSelectList1。对于第二个循环所选项目将放入skillFromSelectList2等
答案 0 :(得分:2)
如此#{...#{...}...}
嵌套EL表达式无效。您应该将EL表达式看作一个大的评估上下文,其中各种变量可以相互交互。
您的具体问题可以通过创建另一个EL变量来解决,该变量表示所需的属性名称,然后使用大括号表示法#{bean[property]}
将其评估为bean的动态属性。
<c:forEach var="i" begin="1" end="#{resource.numberOfSkills}">
<c:set var="propertyName" value="skillFromSelectList#{i}" />
<h:selectOneMenu value="#{skills[propertyName]}">
...
然而,存在设计问题。你不断重复Skill
道具。为什么不在一个Skill[]
或List<Skill>
属性中抓住它们?那你就可以做到
<c:forEach items="#{skills.skillFromSelectList}" varStatus="loop">
<h:selectOneMenu value="#{skills.skillFromSelectList[loop.index]}">
...