jsf - for - ui repeat primefaces
Cómo repetir la salida de texto a través de simple for loop en Facelets without model? (2)
Como necesita una colección, puede hacer una colección (que contenga tantos elementos como la cantidad de tiempo que desea generar los divs) en el bean de respaldo:
public class MyBean {
private List list = new ArrayList<Integer();
{ ... populate the list with numbers, for example ... }
public List getList() {
return list;
}
...
}
y entonces:
<ui:repeat value="#{myBean.list}" var="item">
<div>content</div>
</ui:repeat>
..que daría como resultado tantos div como el tamaño de la propiedad de la list
.
¿Cómo repetir la salida de algún contenido en JSF utilizando solo etiquetas estándar (ui :, h: etc.)? En otras palabras, ¿cómo hacer el equivalente al código PHP a continuación en JSF? Inmediatamente quise aprovechar ui:repeat
, pero necesita recopilación, solo tengo un número.
for ($i = 0; $i < 10; $i++) {
echo "<div>content</div>";
}
O use <c:forEach>
lugar (verdadero, mezclar JSTL con JSF es a veces mal visto, pero esto no debería dañar en su caso particular porque parece que quiere crear la vista "estáticamente", no depende de ninguna variable dinámica )
xmlns:c="http://java.sun.com/jsp/jstl/core"
...
<c:forEach begin="1" end="10">
<div>content</div>
</c:forEach>
O crea una función EL para crear una matriz ficticia para <ui:repeat>
:
package com.example.util;
public final class Functions {
private Functions() {
//
}
public static Object[] createArray(int size) {
return new Object[size];
}
}
que está registrado en /WEB-INF/util.taglib.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<facelet-taglib
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
version="2.0">
<namespace>http://example.com/util/functions</namespace>
<function>
<function-name>createArray</function-name>
<function-class>com.example.util.Functions</function-class>
<function-signature>Object[] createArray(int)</function-signature>
</function>
</facelet-taglib>
y se ha usado de la siguiente manera
xmlns:util="http://example.com/util/functions"
...
<ui:repeat value="#{util:createArray(10)}">
<div>content</div>
</ui:repeat>
Actualización : Acabo de publicar una solicitud de mejora para agregar los atributos de begin
y end
a <ui:repeat>
: http://java.net/jira/browse/JAVASERVERFACES-2240
Actualización 2 : lo he implementado personalmente para JSF 2.3 según https://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-1102 Dado que Mojarra 2.3-m06 debe ser capaz de usar
<ui:repeat begin="1" end="10">
<div>content</div>
</ui:repeat>