我正在使用JSF 2.0 我有一个问题是将inputTexts的值设置为double表。
我可以这样做:
<h:inputText value="#{myBean.table[0]}" />
但是,我想在这样的循环中这样做:
<c:forEach var="i" begin="0" end="#{myBean.inputsNumber}">
<h:inputText value="#{myBean.table[i]}" /> <br/>
</c:forEach>
<h:commandButton action="#{myBean.calculate}" value="Calculate" />
Result: #{myBean.result}
这是我的支持bean:
@ManagedBean
@SessionScoped
public class MyBean {
private double[] table;
private double result;
public MyBean() {
table = new double[100];
}
public void calculate() {
for (int i = 0; i < table.length; i++) {
result += table[i];
}
}
public double[] getTable() {
return table;
}
public int getInputsNumber() {
return table.length;
}
public double getResult() {
return result;
}
}
我尝试将所有组件绑定到HtmlInputText
的数组,但我无法解决它。
我遇到了这个异常:ClassCastException
答案 0 :(得分:3)
有两个问题:
<c:forEach end>
包含在内。您需要从中取1,否则在提交时最终会得到ArrayIndexOutOfBoundsException
。
<c:forEach var="i" begin="0" end="#{myBean.inputsNumber - 1}">
然而,更好的方法是迭代数组本身并通过varStatus
得到索引。
<c:forEach items="#{myBean.table}" varStatus="loop">
<h:inputText value="#{myBean.table[loop.index]}" />
</c:forEach>
EL中的double被视为Double
,而不是double
。因此,您需要Double[]
而不是double[]
,否则在提交时最终会得到ClassCastException
。
private Double[] table;