首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jsf selectOneMenu值不变

jsf selectOneMenu值不变
EN

Stack Overflow用户
提问于 2017-03-30 16:06:39
回答 2查看 1.3K关注 0票数 1

我有一个具有正确值(字符串列表)的selectOneMenu,但是当我选择一个值时,它不会从bean触发setSelectedValue。

代码语言:javascript
复制
<h:selectOneMenu layout="lineDirection" id="myMenu" value="#{dwrBean.selectedValue}"> 
    <f:selectItems value="#{Bean.values}"/> 
</h:selectOneMenu>

Bean:

代码语言:javascript
复制
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 ;
    }
}

日志里什么都没有。

我尝试添加一个监听器:

代码语言:javascript
复制
<h:selectOneMenu layout="lineDirection" id="myMenu" value="#{dwrBean.selectedValue}" valueChangeListener="#{dwrBean.statusChanged}" > 
    <f:selectItems value="#{dwrBean.values}"/> 
</h:selectOneMenu>

这里触发了statusChanged,但是newValue是空的,oldValue是正确的,但是它总是一样的。

代码语言:javascript
复制
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的作用域吗?

非工作配置:

代码语言:javascript
复制
<h:form>
     <rich:popupPanel>
          <h:selectOneMenu>
               ...
          </h:selectOneMenu>
     <rich:popupPanel>
<h:form>

工作配置:

代码语言:javascript
复制
<h:form>
          <h:selectOneMenu>
               ...
          </h:selectOneMenu>
     <rich:popupPanel>

     <rich:popupPanel>
<h:form>
EN

回答 2

Stack Overflow用户

发布于 2017-03-30 16:37:45

在提交表单时调用下面的方法

代码语言:javascript
复制
public void setSelectedValue(String selectedValue) {
    LOGGER.debug("Try to set selected value" + selectedValue);
    if (!selectedValue.isEmpty()){
        this.selectedValue = selectedValue ;
    }
}
票数 0
EN

Stack Overflow用户

发布于 2017-03-30 23:00:34

当值发生变化时,您需要使用AJAX进行部分表单提交。valueChangeListener是一个钩子,当值更改并且表单已提交时,它会为代码提供通知。

下面的代码将为selectOneMenu的onchange事件注册一个AJAX事件。值发生更改后,它将执行菜单(将值提交给bean)。

代码语言:javascript
复制
<h:selectOneMenu layout="lineDirection" id="myMenu" value="#{dwrBean.selectedValue}"> 
   <f:selectItems value="#{dwrBean.values}"/> 
   <f:ajax/>
</h:selectOneMenu>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43111973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档