Вы можете использовать атрибут varStatus
для получения статуса цикла.
<ui:repeat value="#{myController.fileList}" var="element" varStatus="loop">
<t:inputFileUpload value="#{myController.uploadedFile[loop.index]}" />
</ui:repeat>
(кстати, доступно только в JSF 2.x, в JSF 1.x ваша лучшая ставка может быть c:forEach
)
Но почему бы вам просто не использовать следующее?
<ui:repeat value="#{myController.uploadedFile}" var="uploadedFile">
<t:inputFileUpload value="#{uploadedFile}" />
</ui:repeat>
Обновление : fileList
должен иметь тип List<Integer>
или Integer[]
или int[]
, а uploadedFile
должен иметь тип List<SomeObject>
или SomeObject[]
, чтобы получить начальный код для работы.
Обновление 2 : вот небольшой воспроизводимый фрагмент теста:
XHTML:
<h:form>
<h:selectManyCheckbox value="#{bean.selectedIndexes}">
<f:selectItems value="#{bean.selectIndexes}" />
</h:selectManyCheckbox>
<h:commandButton value="submit" />
</h:form>
<ui:repeat value="#{bean.selectedIndexes}" var="selectedIndex">
<p><h:outputText value="#{bean.list[selectedIndex]}" /></p>
</ui:repeat>
Bean
:
private List<SelectItem> selectIndexes; // +getter
private List<Integer> selectedIndexes; // +getter +setter
private List<String> list; // +getter
public Bean() {
selectIndexes = new ArrayList<SelectItem>();
selectIndexes.add(new SelectItem(0, "one"));
selectIndexes.add(new SelectItem(1, "two"));
selectIndexes.add(new SelectItem(2, "three"));
selectIndexes.add(new SelectItem(3, "four"));
selectedIndexes = new ArrayList<Integer>();
list = Arrays.asList("one", "two", "three", "four");
}
Здесь отлично работает на Mojarra 2.0.3 и Apache Tomcat 6.0.29. Вам нужно только заменить selectedIndexes
на fileList
и list
на uploadedFile
.