在我看来,我有两个菜单,我想依赖,即,如果第一个菜单保存值“呈现第二个菜单”和“不呈现第二个菜单”,我想第二个菜单只有当用户选择“渲染第二个菜单“选项。第二个菜单在与第一个菜单相同的页面上呈现后,用户必须从中选择当前项目,填充另一个字段并提交表单以将值存储在数据库中。两个选项列表都是静态的,它们从数据库中获取一次并保持不变。我的问题是我总是从第二个菜单中选择的项目的值为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