【发布时间】: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