我有一個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