无法使用ValueChangeListener从我的SelectOneMenu渲染SelectManyCheckbox

时间:2014-07-02 15:54:15

标签: jsf selectonemenu valuechangelistener selectmanycheckbox

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

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

我希望能够在提交整个地图之前保存每个州。

看我的豆子:

@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          
    }

}

我的JSF页面

<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>

我的真实代码有点混乱,我重新安排了一些以满足我的问题的需要,但如果需要我可以给你真正的代码。

我的问题是,selectmanycheckbox没有做出反应&#34;一点都不我看到当我处于调试模式时,listOfValuesSelected被修改。

1 个答案:

答案 0 :(得分:0)

你在某个地方使用AJAX吗?你使用什么样的形式?

&#34;没有做出反应&#34;,您是说它没有重新渲染,或者当您选择其中的一个或多个项目时没有任何反应?

如果您使用AJAX然后使用给定代码,则选择多个复选框确实不会重新渲染(刷新)。原因是SelectOneMenu没有属性&#34;渲染&#34;这导致某些东西被重新渲染。第三方组件通常具有这样的功能,但标准组件仅通过f:ajax标签执行此操作。此外,您不能使用非组件ID作为重新渲染目标。 Fieldset不是一个组件。

请参阅http://docs.oracle.com/javaee/6/tutorial/doc/gkabr.html了解如何使用f:ajax