1

我有一个要从 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 根本没有“反应”。当我处于调试模式时,我看到 listOfValuesSelected 被修改。

4

1 回答 1

0

你在某处使用 AJAX 吗?你使用什么样的表格?

使用“不反应”,您的意思是它没有重新渲染,或者当您选择其中的一个或多个项目时没有任何反应?

如果您使用 AJAX,那么使用给定的代码,多选复选框确实不会重新渲染(刷新)。原因是 SelectOneMenu 没有导致重新渲染某些内容的属性“render”。第三方组件通常有这样的东西,但标准组件只能通过 f:ajax 标记来实现。此外,您不能使用非组件 ID 作为重新渲染目标。Fieldset 不是一个组件。

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

于 2014-07-02T17:23:09.520 回答