【发布时间】:2011-05-10 15:30:31
【问题描述】:
我有一个列出一些对象的数据表,我想使用 selectOneListbox 为这些对象设置一个属性。这是我的数据表
<h:dataTable value="#{someHandler.entities}"
binding="#{someHandler.dataTable}" var="entitiy">
<h:column>
<f:facet name="header">
<t:outputText value="Level" />
</f:facet>
<h:selectOneListbox id="level" value="#{entitiy.level}" size="1"
valueChangeListener="#{someHandler.changeLevel}"
onchange="submit()">
<f:selectItem itemValue="-" itemLabel="-" />
<f:selectItem itemValue="ALL" itemLabel="ALL" />
(and so on)
</h:selectOneListbox>
</h:column>
<h:column>
<f:facet name="header">
<t:outputText value="Name" />
</f:facet>
<h:outputText value="#{entitiy.name}" />
</h:column>
</h:dataTable>
valueChangeListener 如下所示:
public void changeLevel(ValueChangeEvent event) {
String newLevel = (String) event.getNewValue();
Logger logger = (Logger) dataTable.getRowData();
logger.setLevel(Level.toLevel(newLevel));
}
(dataTable 是一个 HtmlDataTable 对象。)
但是,事件对象始终是相同的——无论 selectOneListbox 在哪一行。(似乎总是第一行中的记录器)。我得到的 Logger 对象也不是我想要的。
有什么想法吗?谢谢!
还有其他问题?即使我有 valueChangeListener,是否也会调用 entity.setLevel() 方法?我使用 entity.level 是因为我想将所选级别显示为这些实体的默认级别。
谢谢!
【问题讨论】: