0

我正在制作一个数据表,您可以在其中添加 exrta 行。在这个额外的行中,有一个输入文本。在输入文本中放入某些内容后,该值应保存到列表中。但事实并非如此。我在下面的方法中尝试使用 Sting 作为参数,但随后保存到一个列表中:“ javax.faces.component.html.HtmlInputText@23sdf”之类的东西。当我将方法更改为 javax.faces.component.html.HtmlInputText 方法时,下面的方法返回 null。

这是表的代码:

    <h:dataTable value="#{correct.newPowody}" var="z" binding="#{table}" >
    <h:inputText binding="#{custom}" value="#{z}">
        <f:ajax event="blur" listener="#{correct.newPowodyAdder(table.rowIndex, custom)}"
                                    execute="@this" render="@form"/>
    </h:inputText>
    </h:dataTable>

这是我正确的bean代码:

    public void newPowodyAdder(int rowIndex, javax.faces.component.html.HtmlInputText powod) {
        String value = powod.getValue().toString();
        this.newPowody.set(rowIndex, value);
    }
}

此方法只需将 inputtext 中的数据添加到列表中。谢谢你的帮助

4

1 回答 1

2

这段代码真的没有任何意义。String这是解决类不可变的简单问题的一种过于复杂的尝试。不要使用<h:inputText value="#{string}". 只需在 EL 中使用大括号符号[]按索引引用列表项,如下所示value="#{bean.strings[index]}"

<h:dataTable binding="#{table}" value="#{correct.newPowody}">
    <h:column>
        <h:inputText value="#{correct.newPowody[table.rowIndex]}" />
    </h:column> 
</h:dataTable>

就这样。不需要 ajax 侦听器方法混乱。

也可以看看:

于 2013-10-30T11:36:46.013 回答