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



伙计们。我在文件柜上做这件事。我已经用强制标志和其他标志分隔了字段的模式列表。然后我有机柜卡列表-它们是数据列表,数据可以是简单的一个值或多个-N值。我正在根据排序将Schema字段映射到Data。所以假设我有3个字段——作者、书籍、页数。作者可以是多个。所以在列表的第一个位置,我有MultipleData,在另外两个SimpleData。当我从MongoDB中读到它时,它是可以的。它是带有内部ui的Datatable:在MultiplaData的情况下重复。所以我打印:

作者:Author1,Author2,Author3…

书籍:书籍

页数: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变量中预先填充了适当数量的String,这样它就可以正确地适应模式。问题是,当我按下"添加数据"按钮时,无论我在输入框中写什么,我都只保存空字符串。

我使用带有属性newCabinetCard-place的sessionscopedbean来存储这些新值。例如,当我通过代码用"abc"字符串填充这些值时,我可以看到它们,但当我更改并保存它时,我只保存那些初始的"abc"串。输入文本似乎无法接受我键入的值。但我还有另一个页面,当我使用inputText并且它们运行良好时,我认为这与dataTable有关。

我请求你的帮助。

谢谢。

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

相关内容

  • 没有找到相关文章

最新更新