【发布时间】:2017-03-30 23:00:33
【问题描述】:
我有一个具有正确值(字符串列表)的 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>
【问题讨论】: