如何在<ui:repeat value =“...”var =“...”>中将值解析为整数?</ui:repeat>

时间:2010-11-25 17:28:44

标签: jsf facelets

我有这样的代码:

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

但是这会返回一个错误:java.lang.NumberFormatException:对于输入字符串:“[0]}”。 UploadedFile是一个Files数组。当我写这样的代码时

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

一切都很好,但我希望有0到8之间的值,而不仅仅是'0',这必须从我的控制器返回。那么如何将这个'element'转换为<t:inputFileUpload value="#{myController.uploadedFile[element]}" />内的int值?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

<击> 您可以使用varStatus attribute获取循环状态。

<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