как разобрать значение в целое число в? - PullRequest
1 голос
/ 25 ноября 2010

У меня есть такой код:

<ui:repeat value="#{myController.fileList}}"  var="element" >
<t:inputFileUpload value="#{myController.uploadedFile[element]}"  />
</ui:repeat>

но это возвращает ошибку: java.lang.NumberFormatException: для входной строки: "[0]}". UploadedFile - это массив файлов. Когда я написал такой код

...
<t:inputFileUpload value="#{myController.uploadedFile[0]}"  />
...

все в порядке, но я хочу иметь значения от 0 до 8, а не только «0», и это должно быть возвращено с моего контроллера. Так как же преобразовать этот «элемент» в значение int внутри <t:inputFileUpload value="#{myController.uploadedFile[element]}" />? Спасибо за помощь.

1 Ответ

1 голос
/ 25 ноября 2010

Вы можете использовать атрибут 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.

...