【问题标题】:Can't render SelectManyCheckbox from my SelectOneMenu with an ValueChangeListener无法使用 ValueChangeListener 从我的 SelectOneMenu 呈现 SelectManyCheckbox
【发布时间】:2014-08-23 12:22:45
【问题描述】:

我有一个要从 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 被修改了。

【问题讨论】:

    标签: jsf selectonemenu valuechangelistener selectmanycheckbox


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 哦,非常感谢。因为我是从 JSF 开始的。我支持那个尝试以更简单的方式响应我的需求的人。所以我将只添加一个按钮来提交更改,并添加一个 ajax 监听器来刷新视图。目前正在为此工作,会及时通知您。感谢您的帮助
    猜你喜欢
    • 2014-06-05
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 2014-03-26
    • 1970-01-01
    • 2019-01-05
    相关资源
    最近更新 更多