我有一个具有正确值(字符串列表)的selectOneMenu,但是当我选择一个值时,它不会从bean触发setSelectedValue。
<h:selectOneMenu layout="lineDirection" id="myMenu" value="#{dwrBean.selectedValue}">
<f:selectItems value="#{Bean.values}"/>
</h:selectOneMenu>Bean:
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是空的,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>发布于 2017-03-30 16:37:45
在提交表单时调用下面的方法
public void setSelectedValue(String selectedValue) {
LOGGER.debug("Try to set selected value" + selectedValue);
if (!selectedValue.isEmpty()){
this.selectedValue = selectedValue ;
}
}发布于 2017-03-30 23:00:34
当值发生变化时,您需要使用AJAX进行部分表单提交。valueChangeListener是一个钩子,当值更改并且表单已提交时,它会为代码提供通知。
下面的代码将为selectOneMenu的onchange事件注册一个AJAX事件。值发生更改后,它将执行菜单(将值提交给bean)。
<h:selectOneMenu layout="lineDirection" id="myMenu" value="#{dwrBean.selectedValue}">
<f:selectItems value="#{dwrBean.values}"/>
<f:ajax/>
</h:selectOneMenu>https://stackoverflow.com/questions/43111973
复制相似问题