1

JSF2.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}

これが私のバッキングビーンです:

@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

4

1 に答える 1

3

2つの問題があります:

  1. <c:forEach end>包括的です。ArrayIndexOutOfBoundsExceptionあなたはそれから1を取り除く必要があります、さもなければあなたは提出するときに終わる。

    <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>
    

  2. DoubleELのdoubleは、としてではなく、として扱われdoubleます。Double[]したがって、の代わりに必要です。そうしないと、送信時にdouble[]終了します。ClassCastException

    private Double[] table;
    
于 2012-11-29T20:37:43.240 に答える