我有一个dataTable列出了一些对象,我想为使用selectOneListbox的对象设置一个属性。这是我的dataTableJSF dataTable 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));
}
然而,事件对象始终是相同的 - 不管哪一行(数据表上的HtmlDataTable对象。) selectOneListbox在。(它似乎总是第一行的记录器)。我得到的Logger对象也不是我想要的。
任何想法?谢谢!
和其他问题?是否调用了entitiy.setLevel()方法,即使我有一个valueChangeListener?我使用entitiy.level,因为我想将选定的级别显示为这些实体的默认级别。
谢谢!
非常感谢BalusC,我已经从你身上学到了很多东西!但是有一个问题:实际上我想通过调用某个第三方类来获得具有值的entity.level预设值。每行都应该显示当前级别(这就是为什么我不想在每一行显示“ - ”)并且如果我更改该列表框的值,该级别应该改变(仅针对该行)。我会看看我能用ajax做些什么。 – geeehhdaa 2011-05-11 15:54:14
不客气。 – BalusC 2011-05-11 15:55:42