无法从h:dataTable中的h:inputText获取数据

时间:2014-04-13 16:11:41

标签: mongodb jsf input datatable

人。我在做文件柜。我已将模式 - 字段列表与强制标志和其他标志分开。然后我有了柜卡列表 - 它们是列表数据和数据可以是简单的 - 一个值或多个 - N值。我根据排序将Schema字段映射到Data。所以假设我有3个字段 - 作者,书籍,页数。作者可以是多个。所以在List中首先我有MultipleData,另外两个是SimpleData。当我从MongoDB读取它时,它没问题。对于MultiplaData情况,它是内部ui:repeat的Datatable。所以我打印:

作者:作者1,作者2,作者3 ......

书籍:书籍

页数:62

然而,当我尝试添加某些内容时,它无效。我不得不替换内部ui:repeat因为它抛出了arrayindexoutofbound异常,所以我用h:dataTable替换它。

这是我的代码

<h:form>
        <h3>Add new data</h3>
        <hr/>
        <h:dataTable value="#{filingCabinetManagerBean.filingCabinet.schema.fields}" var="schemaField" style="vertical-align: top">

            <h:column><h:outputText value="#{schemaField.fieldTitle}:" style="font-size: 20px;font-weight: bold"/></h:column>
            <h:column>
                <ul>
                    <h:dataTable value="#{filingCabinetManagerBean.newCabinetCard.cardData.get(filingCabinetManagerBean.filingCabinet.schema.fields.indexOf(schemaField)).data}" var="data"  rowStatePreserved="true">
                        <h:column>         
                            <li>
                                <h:inputText value="#{data}"/>
                            </li> 
                        </h:column> 
                        <h:column>

                            <p:commandButton value="Add field" actionListener="#{filingCabinetManagerBean.addMultipleDataField(filingCabinetManagerBean.filingCabinet.schema.fields.indexOf(schemaField))}"
                                             update="@form"  rendered="#{schemaField.repeatable and filingCabinetManagerBean.newCabinetCard.cardData.get(filingCabinetManagerBean.filingCabinet.schema.fields.indexOf(schemaField)).data.lastIndexOf(data) == (filingCabinetManagerBean.newCabinetCard.cardData.get(filingCabinetManagerBean.filingCabinet.schema.fields.indexOf(schemaField)).data.size()-1)}"/>

                        </h:column>

                    </h:dataTable>
                </ul>     
            </h:column>

        </h:dataTable>

        <p:commandButton value="Add data" 
                         action="#{filingCabinetManagerBean.addNewCabinetCard(testBean.selectedDB)}" update="@all" />
    </h:form>

当然,我使用适当数量的字符串预填充newCabinetCard变量,因此它适合于模式。 问题是,当我按下添加数据按钮时,无论我写入输入框,我都只保存空字符串。

我正在使用带有属性newCabinetCard的sessionscoped bean - 存放这些新值的地方。当我用&#34; abc&#34;填充这些值时。通过代码字符串,我可以看到它们但是当我更改它并保存它时 - 我只保存那些初始的&#34; abc&#34;字符串。看起来输入文本无法获取我输入的值。但是我有另外一个页面,当我使用inputTexts并且它们运行良好时,我认为这必须对dataTable做一些事情。

我在寻求你的帮助。

谢谢。

1 个答案:

答案 0 :(得分:0)

3个月前我找到了解决方案。变量“data”只是String,JSF需要设置/ get方法来写入/读取变量。当然String没有它们,所以我创建了一个封装的类MyString,其中包含一个String变量,并为该变量设置/ get方法。现在一切都很完美。