Ответ 1
В стандартном API JSF ничего подобного нет. Также ничего не приходит в голову в PrimeFaces.
OmniFaces <o:componentIdParam>
может быть именно то, что вы ищете. Это позволяет вам разрешить JSF отображать только подмножество дерева компонентов на основе определенного параметра запроса, который может быть идентификатором компонента или идентификатором клиента. Вы могли бы просто использовать jQuery $.get()
, чтобы перезагрузить <ui:repeat>
вместе с начальным индексом в качестве параметра запроса и использовать jQuery $.append()
, чтобы добавить его в HTML DOM.
Вот полный пример запуска. Вид:
<!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>Qaru 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;
}
}
Обновить: демонстрацию live можно найти в примере "Расширяемый список" страницы <o:componentIdParam>
текущей витрины приложение.