无法使用 ValueChangeListener 从我的 SelectOneMenu 呈现 SelectManyCheckbox



我有一个Map (Integer, List),我想从JSF页面填充它。我只使用JSF,没有使用Primefaces之类的。

在我的JSF页面上有一个selectOneMenu,它显示我的Map的每个键,还有一个selectManyBox,它为每个键选择值。

我希望能够在提交整个Map之前保存每个状态。

看我的豆子:

@ManagedBean(name="myBean")
@SessionScoped
public class MyBean implements Serializable {
    (...)
    public void refresh(ValueChangeEvent e)
{
    if (idRole==-1){ //to check if its just the first selection                     
        setKey((int)e.getNewValue());
    }
    else{
        myObject.getMap().put(key,listOfValuesSelected); //put current manycheckbox values in last selected key
        setKey((int)e.getNewValue()); //get new key
        listOfValuesSelected=MyObject.getMap().get(Key); //refresh the
                               //selectManyCheckbox for the newly selected key          
    }
}

My JSF Page

<h:selectOneMenu id="idRole" value="#{myBean.key}" onchange="submit()" valueChangeListener="#{myBean.refresh}" render="checkbox"> >
    <f:selectItem itemLabel="" itemValue="" />
    <f:selectItems value="#{myBean.listKeys}" />
</h:selectOneMenu>
<fieldset id="checkbox">
    <h:selectManyCheckbox value="#{myBean.listOfValuesSelected}">
        <f:selectItems value="#{myBean.listeOfValues}" var="n"
            itemLabel="#{n.title}" itemValue="#{n.key}"/>
    </h:selectManyCheckbox>
</fieldset>

我的实际代码有点乱,我重新安排了一下,以适应我的问题的需要,但如果需要的话,我可以给你真实的代码。

我的问题是selectmany复选框根本没有"反应"。当我处于调试模式时,我看到listOfValuesSelected被修改。

您是否在某处使用AJAX ?你用的是哪种形式?

与"不反应",你的意思是它不重新渲染,或者什么都没有发生,当你选择一个或多个项目在它?

如果您使用AJAX,那么对于给定的代码,select many复选框将确实不会重新呈现(刷新)。原因是SelectOneMenu没有一个属性"render",它会导致一些东西被重新渲染。第三方组件通常有这样的功能,但标准组件只能通过f:ajax标记实现。此外,您不能使用非组件ID作为重新呈现目标。字段集不是组件。

参见http://docs.oracle.com/javaee/6/tutorial/doc/gkabr.html关于如何使用f:ajax

相关内容

  • 没有找到相关文章

最新更新