我有一个selectOneMenu,它具有正确的值(字符串列表)但是当我选择一个值时,它不会触发bean的setSelectedValue。
<h:selectOneMenu layout="lineDirection" id="myMenu" value="#{dwrBean.selectedValue}">
<f:selectItems value="#{Bean.values}"/>
</h:selectOneMenu>
豆:
private String selectedValue = "";
private List<String> values = new LinkedList<String>();
...
public String getSelectedValue() {
return this.selectedValue;
}
public void setSelectedValue(String selectedValue) {
LOGGER.debug("Try to set selected value" + selectedValue);
if (!selectedValue.isEmpty()){
this.selectedValue = selectedValue ;
}
}
日志中没有任何内容。
我试图添加一个监听器:
<h:selectOneMenu layout="lineDirection" id="myMenu" value="#{dwrBean.selectedValue}" valueChangeListener="#{dwrBean.statusChanged}" >
<f:selectItems value="#{dwrBean.values}"/>
</h:selectOneMenu>
这里触发了statusChanged,但newValue为null,oldValue是正确的,但它始终是相同的。
public void statusChanged(ValueChangeEvent event) {
LOGGER.debug("new" + event.getNewValue());
LOGGER.debug("old" + event.getOldValue());
if (event.getNewValue() != null &&
!((String) event.getNewValue()).isEmpty()) {
LOGGER.debug("OK");
}
}
我真的不明白。
实际上,selectOneMenu位于弹出窗口内。
我在弹出窗口之外移动了selectOneMenu并且它可以工作。我是否必须更改Bean的范围?
非工作配置:
<h:form>
<rich:popupPanel>
<h:selectOneMenu>
...
</h:selectOneMenu>
<rich:popupPanel>
<h:form>
工作配置:
<h:form>
<h:selectOneMenu>
...
</h:selectOneMenu>
<rich:popupPanel>
<rich:popupPanel>
<h:form>
答案 0 :(得分:0)
下面的方法在您提交表单时调用
public void setSelectedValue(String selectedValue) {
LOGGER.debug("Try to set selected value" + selectedValue);
if (!selectedValue.isEmpty()){
this.selectedValue = selectedValue ;
}
}
答案 1 :(得分:0)
当值发生变化时,您需要使用AJAX进行部分表单提交。 valueChangeListener是一个钩子,它在值已更改且表单已提交时为您的代码提供通知。
下面的代码将为selectOneMenu的onchange事件注册一个AJAX事件。值会更改,然后执行菜单(将值提交给bean)。
<h:selectOneMenu layout="lineDirection" id="myMenu" value="#{dwrBean.selectedValue}">
<f:selectItems value="#{dwrBean.values}"/>
<f:ajax/>
</h:selectOneMenu>