在我看來,我有兩個菜單,我想依賴,即,如果第一個菜單保存值「呈現第二個菜單」和「不呈現第二個菜單」,我想第二個菜單隻有當用戶選擇「渲染第二個菜單「選項。第二個菜單在與第一個菜單相同的頁面上呈現後,用戶必須從中選擇當前項目,填充另一個字段並提交表單以將值存儲在數據庫中。兩個選項列表都是靜態的,它們從數據庫中獲取一次並保持不變。我的問題是我總是從第二個菜單中選擇的項目的值爲null。如何獲得適當的價值?保存有問題的元件的視圖的示例代碼:JSF:如果selectOneMenu的渲染是動態的,如何從selectOneMenu中獲取所選項目?
<h:selectOneMenu id="renderSecond" value="#{Bean.renderSecondValue}"
valueChangeListener="#{Bean.updateDependentMenus}"
immediate="true"
onchange="this.form.submit();" >
<f:selectItems value="#{Bean.typesOfRendering}" />
</h:selectOneMenu><br />
<h:selectOneMenu id="iWillReturnYouZeroAnyway" value="#{Bean.currentItem}"
rendered="#{Bean.rendered}" >
<f:selectItems value="#{Bean.items}" />
</h:selectOneMenu><br />
<h:commandButton action="#{Bean.store}" value="#Store" />
但是,如果我從第二個菜單中刪除「渲染」屬性,一切工作正常,除了用於顯示菜單的一切,我試圖阻止時間,所以我建議問題是動態渲染的行爲。 isRendered的初始值爲false,因爲第一個菜單中的默認項目是「不渲染第二個菜單」。當我更改第一個菜單中的值並使用valueChangeListener更新isRendered時,會顯示第二個菜單,但在提交時不會初始化currentItem。
從我的支持bean部分代碼如下:只有
public void updateDependentMenus(ValueChangeEvent value) {
String newValue = (String) value.getNewValue();
if ("render second menu" == newValue){
isRendered = true;
} else {
isRendered = false;
}
}
public String store(){
System.out.println(currentItem);
return "stored";
}
是的,那正是我也在想的。但是,並不知道視圖範圍。謝謝。 – 2010-05-19 18:21:04