【问题标题】:Dynamic h:inputtext to backing Bean Array in jsf [ClassCastException]动态 h:inputtext 在 jsf [ClassCastException] 中支持 Bean 数组
【发布时间】:2012-11-29 20:24:30
【问题描述】:

我正在使用 JSF 2.0 我在将 inputTexts 的值设置为双精度表时遇到问题。

我能做到:

<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

【问题讨论】:

    标签: java jsf


    【解决方案1】:

    有2个问题:

    1. &lt;c:forEach end&gt; 包含在内。需要减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>
      

    2. EL 中的 double 被视为 Double,而不是 double。所以你需要Double[]而不是double[],否则提交时你最终会得到ClassCastException

      private Double[] table;
      

    【讨论】:

    • 这是我的问题的解决方案:私有 Double[] 表,我有 ClassCastException,非常感谢
    • 不客气。在未来的问题中,如果您详细说明您正面临哪些问题/异常,对其他人会更有帮助。异常不是为了装饰而抛出的,但它们实际上说明了问题的原因,因此也间接地说明了解决方案。
    猜你喜欢
    • 2012-09-06
    • 1970-01-01
    • 2012-11-15
    • 2011-07-12
    • 1970-01-01
    • 2012-06-27
    • 2011-07-23
    • 2012-06-25
    • 2011-04-11
    相关资源
    最近更新 更多