在尝试将动态数据作为侦听器中的参数进行访问时,我遇到了一些奇怪的结果。下面是我的xhtml的片段。我有一个支持bean,skillsController.java和一个pojo Skill.java
ui:repeat正在迭代类别,并为每个类别生成一个dataTable。视觉上一切似乎都正确生成。尝试访问稍后在xhtml中创建的变量时会出现问题。当使用附加到selectonmenu的任何类型的侦听器时,数据表中的技能变量与最初用于生成页面的数据不匹配。例如,提交表单时使用的技能与第一类技能中的数据相关联,而不是它应具有的正确类别/技能。
似乎技能在页面生成和表单提交之间不同步。关于如何在表单提交中获得存储在技能中的正确值,是否有任何建议?
<h:form rendered="#{!skillsController.mode.equalsIgnoreCase('Show My Skills')}">
<ui:repeat var="cat" value="#{skillsController.masterCategories}" varStatus="status">
<h:panelGroup layout="block" rendered="#{cat.toString().equalsIgnoreCase(skillsController.mode)||skillsController.mode.equalsIgnoreCase('Show All Skills')}">
<h3 class="arSkillsHeader">
<h:outputLabel value="#{cat.toString()}"
style="font-weight:bold" />
</h3>
<h:dataTable style="margin-left:15px; margin-right:15px"
class="suggestionsTable" var="skill"
rowClasses="gray, lightgraybg"
columnClasses="null, hCol3, versionCol, null"
value="#{skillsController.getSkillsByCategory(cat)}">
<h:column>
<h:graphicImage value="/resources/images/success.png"
style="height:20px"
rendered="#{skillsController.hasSkill(cat.toString(), skill.name.toString())}" />
</h:column>
<h:column>
<h:outputText value="#{skill.name.toString()}" />
</h:column>
<h:column>
<h:outputText value="#{skill.categoryName}" rendered="false" />
<h:outputText value="#{skill.name}" rendered="false" />
<h:selectManyCheckbox id = "versionCheckbox"
layout ="lineDirection"
style = "text-align: left;"
value = "#{skill.checkedVersions}"
valueChangeListener="#{skillsController.versionsChecked}">
<f:selectItems value="#{skillsController.getVersions(skill.getName(), skill.getCategoryName())}"/>
</h:selectManyCheckbox>
</h:column>
<h:column>
<h:selectOneMenu id="proficiency" value="#{skill.proficiency}">
<f:selectItem
itemValue="#{skillsController.timeList.get(0)}"
itemLabel="Select Experience Level" />
<f:selectItems
value="#{skillsController.timeList.subList(1, skillsController.timeList.size())}" />
<f:ajax render="versionCheckbox @this"
listener="#{skill.proficiencyUpdated(skill.proficiency)}"/>
</h:selectOneMenu>
</h:column>
</h:dataTable>
<h:panelGroup layout="block" style="height:20px">
<h:commandButton value="Update Category" style="float:right; margin-right:15px;"
action="#{skillsController.updateCategorySkills(cat)}"
onclick="updatePro(this.id);">
<f:ajax execute="@form" render="@form" />
</h:commandButton>
</h:panelGroup>
</h:panelGroup>
</ui:repeat>
</h:form>