我有 test.xhtml:
<h:form id="formProduct" >
<h:panelGroup id="filterProductTotal" layout="block">
<h:outputText value="#{filtersControllerRequestScoped.filteredProductsCount}"/>
</h:panelGroup>
<div id="product_container">
<ui:repeat value="#{filtersControllerRequestScoped.getFilteredProducts(1)}" var="product">
<div class="item">
<util:product-item-preview_2 productItem="#{product}"/>
</div>
</ui:repeat>
</div>
</h:form>
我读到了重复调用方法的问题,并努力保持GET方法的业务逻辑并尝试实现LAZY加载。
请求范围 bean 中的方法 getFilteredProducts() 在各种请求中调用,即使我不更新表单 id="formProduct"。由“p:ajax”或“p:remoteCommand”调用的请求,带有和不带有“update” anithig。
我的问题 - 我不明白为什么每次(每次 ajax 调用)都调用方法“getFilteredProducts”,但在加载页面时只调用一次“filteredProductsCount”。
更新:一些想法。
可能是当我在其他请求中使用“#{product}”时,实际上我使用的是“#{filtersControllerRequestScoped.getFilteredProducts(1).get(INDEX)}”,而不是简单的对象“#{product}”?
更新:部分<util:product-item-preview_2/>
:
<composite:interface name="productItemPreview" displayName="hello">
<composite:attribute name="productItem"/>
</composite:interface>
<composite:implementation>
...
<h:commandLink value="quick order" onclick="quickOrderPrepare(#{cc.attrs.productItem.productId})">
<p:ajax process="@this" oncomplete="quickOrderShow()" partialSubmit="true"/>
</h:commandLink>
...
<span class="b-prices">
<h:outputText value="Price: "/>
<h:outputText value="#{discountControllerRequestScoped.getProductPrice(cc.attrs.productItem)}">
<f:convertNumber minFractionDigits="2" maxFractionDigits="2"/>
</h:outputText>
</span>
...
<script>
function quickOrderPrepare(productId) {
setProductQuickOrderPanelRemoteCommand([{name: 'productId', value: productId}]);
}
function quickOrderShow(){
updateQuickOrderPanelRemoteCommand();
$('.popup.productQuickOrder').bPopup({
onClose: function() { updateBasket(); }
});
}
</script>
setProductQuickOrderPanelRemoteCommand
并且updateQuickOrderPanelRemoteCommand
是primefaces远程命令。