【问题标题】:Cannot get data from h:inputText inside h:dataTable [duplicate]无法从 h:dataTable 中的 h:inputText 获取数据 [重复]
【发布时间】:2014-04-13 16:11:40
【问题描述】:

伙计们。我在文件柜上做。我已经分离了架构 - 具有强制和其他标志的字段列表。然后我有橱柜卡列表 - 它们是列表或数据,数据可以是简单的 - 一个值或多个 - N 个值。我根据顺序将模式字段映射到数据。所以假设我有 3 个字段——作者、书籍、页数。作者可以是多个。所以首先在 List 中我有 MultipleData,在另外两个 SimpleData 上。当我从 MongoDB 中读取它时,就可以了。它是带有内部 ui:repeat 的 Datatable,用于 MultiplaData 情况。所以我打印:

作者:作者 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 - 存储这些新值的地方。例如,当我通过代码用“abc”字符串填充这些值时,我可以看到它们,但是当我更改并保存它时 - 我只保存那些初始的“abc”字符串。似乎输入文本不能接受我输入的值。但是我还有另一个页面,当我使用 inputTexts 并且它们运行良好时,我认为这与 dataTable 有关系。

我正在寻求您的帮助。

谢谢。

【问题讨论】:

    标签: mongodb jsf input datatable


    【解决方案1】:

    3 个月前,我找到了解决方案。变量“数据”只是字符串,JSF 需要设置/获取方法来写入/读取变量。当然 String 没有它们,所以我创建了一个封装类 MyString ,其中包含一个 String 变量,并为该变量设置/获取方法。现在一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      • 2013-03-16
      • 1970-01-01
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多