1
我的JSF2項目中存在一些有問題的行爲。未在JSF 2中從<h:selectBooleanCheckbox>觸發的事件
我有一個下拉框h:selectOneMenu
這trigers刷新頁面中的onchange = "submit();"
這反過來又導致我h:dataTable
與複選框h:selectBooleanCheckbox
填充。
的問題是,我不明白所有從複選框中ValueChangeEvent
事件 - 因爲有在最初的下拉選擇複選框,我只得到儘可能多的事件。例如:
- 首先情況下我不改變下拉的值:在創建和我的初始下拉選擇產生3個複選框,即在表3行
- 頁。我選擇所有複選框。
- 當我按OK按鈕後,3
setNodeState
事件被解僱。
- 第二種情況下,我改變值下拉的:創建
- 頁和我的初始下拉選擇產生3個複選框,即在表3點的行。
- 然後我點擊下拉菜單並選擇不同的東西。這導致該表有10個複選框,因爲有10個
MultiFileSelectMgmtBean.fileNames
。我選擇所有複選框。 - 之後我按下確定奇怪的事情發生:只有3
setNodeState
事件被解僱,而不是我所期望的10。
這裏是XHTML代碼:
<tr>
<td>
<h:selectOneMenu
value = "#{MultiFileSelectMgmtBean.selectedLocationId}"
valueChangeListener = "#{MultiFileSelectMgmtBean.LocationChangeEvent}"
onchange = "submit();"
styleClass = "text" style="width: 250px;">
<f:selectItems
value = "#{MultiFileSelectMgmtBean.locationsListItems}"
var = "location"
itemValue = "#{location}"
itemLabel = "#{location.label}">
</f:selectItems>
</h:selectOneMenu>
</td>
</tr>
<tr>
<td>
<h:dataTable value="#{MultiFileSelectMgmtBean.fileNames}" var="filename">
<h:column>
<h:selectBooleanCheckbox value = "#{MultiFileSelectMgmtBean.fileMap[filename]}"
valueChangeListener = "#{MultiFileSelectMgmtBean.setNodeState}"
title = "#{filename}"
/>
<h:outputText value="#{filename}" styleClass="text"/>
</h:column>
</h:dataTable>
</td>
</tr>
爲什麼valueChangeListener的instad您不會添加的公共無效newListenerMethod(AjaxBehaviorEvent事件){} –
Daniel
2012-04-06 13:23:51
不知道爲什麼。 :-)我準備將所有代碼轉移到ajax。但這個需要做舊風格。 – Danijel 2012-04-06 13:28:30
如果你在jsf2沒有理由不使用它的好處,使用onchange =「submit();」對於jsf1是好的...而不是你更好的f:ajax render =「@ form」.... – Daniel 2012-04-06 13:31:36