標準の JSF API にはそのようなものはありません。また、PrimeFaces では何も思い浮かびません。PrimeFaces については、最後の更新を参照してください
ただし、OmniFaces <o:componentIdParam>
はまさにあなたが探しているものかもしれません。コンポーネント ID またはクライアント ID などの特定のリクエスト パラメータに基づいて、コンポーネント ツリーのサブセットのみを JSF にレンダリングさせることができます。基本的には、jQuery を使用して開始インデックスをリクエスト パラメータとして$.get()
リロードし、 jQuery を使用してそれを HTML DOM に追加することができます。<ui:repeat>
$.append()
完全なキックオフの例を次に示します。景色:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:o="http://omnifaces.org/ui"
>
<f:metadata>
<o:componentIdParam componentIdName="componentId" />
</f:metadata>
<h:head>
<title>Stack Overflow Question 11364006</title>
<script src="http://code.jquery.com/jquery-latest.min.js"></script> <!-- Substitute with PrimeFaces' one, if necessary. -->
</h:head>
<h:body>
<ul id="items">
<ui:repeat id="itemsRepeater" value="#{bean.items}" var="item">
<li>#{item}</li>
</ui:repeat>
</ul>
<input type="button" id="showMore" value="Show more"/>
<h:outputScript>
$("#showMore").click(function() {
$items = $("#items");
var params = { start: $items.find("li").length, componentId: "itemsRepeater" };
$.get(location, params, function(html) {
$items.append(html);
});
});
</h:outputScript>
</h:body>
</html>
バッキング Bean:
@ManagedBean
@RequestScoped
public class Bean {
private List<String> items;
@ManagedProperty("#{param.start}")
private int start;
@PostConstruct
public void init() {
// Just a stub. Do your thing to fill the items.
items = new ArrayList<String>();
int size = start + 10;
for (int i = start; i < size; i++) {
items.add("item " + (i + 1));
}
}
public void setStart(int start) {
this.start = start;
}
public List<String> getItems() {
return items;
}
}
更新: ライブ デモは、現在のショーケース アプリケーションの<o:componentIdParam>
ページの「展開可能なリスト」の例にあります。
更新 2) : PrimeFacesp:datascroller
には「オンデマンド スクロール」による遅延読み込みがあります