Jsf remoteCommand之后未设置selectBooleanCheckbox

Jsf remoteCommand之后未设置selectBooleanCheckbox,jsf,primefaces,Jsf,Primefaces,我有一个remmote命令,它在加载项目后更新列表,并选中repeat render SelectBoolean复选框。但是,复选框中的值设置不正确,所有值都未选中。在某些项目旁边,选定属性(布尔值)设置为true 如果我只是在加载列表后在backingbean中设置一个项,那么它只对该项有效。有什么问题吗 index.xhtml <h:form> <h:panelGroup id="itemsHolder"> <h:pan

我有一个remmote命令,它在加载项目后更新列表,并选中repeat render SelectBoolean复选框。但是,复选框中的值设置不正确,所有值都未选中。在某些项目旁边,选定属性(布尔值)设置为true

如果我只是在加载列表后在backingbean中设置一个项,那么它只对该项有效。有什么问题吗

index.xhtml

 <h:form>
        <h:panelGroup id="itemsHolder">
            <h:panelGrid rendered="#{backingBean.items != null}">
                <h:selectBooleanCheckbox value="#{backingBean.item.selected}" disabled="#{backingBean.rendered}" /> #{backingBean.item.name}
                <ui:repeat value="#{backingBean.items.toArray()}" var="option" >
                    <h:selectBooleanCheckbox value="#{option.selected}" disabled="#{backingBean.rendered}" />
                    #{option.name}
                    <br />
                </ui:repeat>
            </h:panelGrid>
        </h:panelGroup>
        <p:remoteCommand rendered="#{backingBean.rendered}"
                         name="initItems"
                         actionListener="#{backingBean.initItems()}"
                         process="@this"
                         update="itemsHolder"/>

    </h:form>

    <ui:fragment rendered="#{backingBean.rendered}">
        <script>
            $(document).ready(function () {
                setTimeout(function () {
                    initItems();
                }, 3000);

            });
        </script>
    </ui:fragment>

#{backingBean.item.name}
#{option.name}

$(文档).ready(函数(){ setTimeout(函数(){ initItems(); }, 3000); });
BackingBean.java

@Component
@ManagedBean
@Scope("view")
public class BackingBean {

private boolean rendered = true;

private Set<Item> items;

private Item item;

public void initItems() {
    items = new LinkedHashSet<>();
    items.add(new Item("item 1", true, "1"));
    items.add(new Item("item 2", false, "2"));
    items.add(new Item("item 3", true, "3"));

    item = new Item("lonely item", true, "4");
   }

//Getters and setters
}
@组件
@ManagedBean
@范围(“视图”)
公共类BackingBean{
私有布尔值=真;
私人设置项目;
私人物品;
公共物品(){
items=新LinkedHashSet();
项目。添加(新项目(“项目1”,正确,“1”);
添加(新项目(“项目2”,假,“2”));
项目。添加(新项目(“项目3”,正确,“3”);
项目=新项目(“单独项目”,真,“4”);
}
//接球手和接球手
}
更新:
我在一个沙箱中创建了一个真实代码的副本,我仍然无法复制,我想我必须从真实代码中添加更多依赖项。

我已经重新创建了您的案例,并且它与以下简单的托管bean一起工作得很好

@ManagedBean(name = "bean")
@ViewScoped
public class YourBean implements Serializable {
    List<YourItem> items=new ArrayList<>();
    YourItem anItem=new YourItem();

    @PostConstruct
    public void init() {
        System.out.println("Bean is created");
        //initialize items
        anItem.setSelected(false);
        //add 5 items to list
        for (int i=0;i<5;i++){
            YourItem item=new YourItem();
            item.setSelected(false);
            items.add(item);
        }
    }

    public void onUpdateItems(){
        System.out.println("Items will be updated...");
        anItem.setSelected(true);
        //modify 1st and 3rd item
        items.get(0).setSelected(true);
        items.get(2).setSelected(true);
        //remove 4th item
        items.remove(3);
    }

    public List<YourItem> getItems() {
        return items;
    }

    public void setItems(List<YourItem> items) {
        this.items = items;
    }

    public YourItem getAnItem() {
        return anItem;
    }

    public void setAnItem(YourItem anItem) {
        this.anItem = anItem;
    }
}

将您的代码与此示例进行比较。很可能在更新
项目列表的托管bean方法中存在问题,或者更新
h:panelGroup
的方式存在问题,远程命令在哪里?更好的是,你的代码在哪里?我将这段代码添加到另一个项目中,以创建最小的、可验证的示例,但我无法复制它。问题是这个项目有太多的依赖项和框架,这需要一段时间。到目前为止,这个问题只发生在我当地的环境中。我完成任务后会回来的,谢谢你的时间。嗨,杜桑,我试着在另一个项目中复制它,实际上正如你所怀疑的那样。我认为我应该继续添加主项目的依赖项,直到我能够复制它。
          <h:form id="form">
            <h:panelGroup id="itemHolder">
                <h:panelGrid rendered="#{bean.items != null}">
                    <h:selectBooleanCheckbox value="#{bean.anItem.selected}" />
                    <ui:repeat value="#{bean.items}" var="item">
                        <h:selectBooleanCheckbox value="#{item.selected}" />
                        #{item.selected}
                        <br />
                    </ui:repeat>
                </h:panelGrid>
            </h:panelGroup>

            <p:remoteCommand name="startUpdate" 
                             actionListener="#{bean.onUpdateItems()}" 
                             update=":form:itemHolder"/>
            <p:commandButton value="Update items" onclick="startUpdate();"/>
        </h:form>