【问题标题】:update items in View [duplicate]更新视图中的项目[重复]
【发布时间】:2016-09-28 08:52:56
【问题描述】:

我正在尝试对产品进行研究。

我的看法是这样的:

<h:form>
    <p:layoutUnit  position="center">
        <ui:include src="/Desktop/Users/Include/featureCheckbox.xhtml"/>     
    </p:layoutUnit>
    <p:layoutUnit position="south" style="border: 0px">
        <p:commandButton value="Search" 
                         actionListener="#{productsController.searchProdByFeatures()}"
                         oncomplete="listProd.show();"/>
    </p:layoutUnit>
</h:form>
<p:panel widgetVar="listProd" >
    <ui:include src="/Desktop/Users/Include/productsScroller.xhtml"/>
</p:panel>

这是 productsScroller.xhtml

OT:我不知道为什么我必须使用来查看更多数据,只是滚动不起作用......

<h:form prependId="false"> 
    <p:dataScroller value="#{productsController.items}" var="item" chunkSize="10">
        <f:facet name="header">
            Scroll Down to Load More Wheelchair
        </f:facet>

        <h:panelGrid columns="1" style="width:100%" >
            <p:outputPanel>
                <h:outputText value="#{item.name}" style="font-weight: bold"/>
            </p:outputPanel>
        </h:panelGrid>
        <f:facet name="loader">
            <p:commandButton type="button" value="View More" />
        </f:facet>
    </p:dataScroller>
</h:form>

这是 productsController(@Named 和 @ViewScoped)

...
private Collection<Product> items;
private Collection<Product> selectedItems;


public Collection<Product> getSelectedItems() {
    return selectedItems;
}

public void setSelectedItems(Collection<Product> selectedItems) {
    this.selectedItems = selectedItems;
}

public Collection<Product> getItems() {
    if (items == null) {
        items = this.ejbFacade.findAll();
    }
    System.out.println(items.size());
    return items;
}

public void setItems(Collection<Product> items) {
    this.items = items;
}

public void searchProdByFeatures (){
    List<Product> items= (List<Product>) getItems();
    List<Product> newItems;
    Collection<Feature> featuresCollection = featureController.getSelectedItems();
    List<Feature> selectedFeatures = new ArrayList<>(featuresCollection);
    System.out.println(selectedFeatures.size());    //just for debug
    try {
        for (Feature selectedFeature : selectedFeatures) {
            String msg=(selectedFeature.getName()+" / ");
            System.out.println(selectedFeature.getName());
        }
        newItems=productFacade.findProdByFeatures(selectedFeatures, items);
        System.out.println("Searched product are "+newItems.size());    //just for debug        
        setItems(newItems);
        System.out.println("New items are "+getItems().size());   //just for debug     
    } catch (NotFoundException e) {
        setItems(null);
        JsfUtil.addErrorMessage(e.getMessage());
    }
}

searchProdByFeatures() 方法效果很好,但问题是 dataScroller 不会更新... 我知道视图中有问题...但是什么?

还是从控制器更新视图会更好?怎么样?

【问题讨论】:

标签: jsf primefaces ajax-update


【解决方案1】:

通过添加 update="yourIddataScroller"

编辑您的代码以更新 dataScroller
<p:commandButton value="Search" 
                         actionListener="#{productsController.searchProdByFeatures()}"
                         oncomplete="listProd.show();" update="yourIddataScroller"/>

【讨论】:

  • 对不起,我忘记在我的问题中写更新标签...我使用的是 update="idContainerDataScroller" 并返回空白内容...使用 IdDataScroller 解决了问题...谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-02-20
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-03
  • 2013-02-22
相关资源
最近更新 更多