我有一个带行级别编辑的数据表。其中一列是<p:selectBooleanCheckbox>
:
<p:dataTable id="players_table_id" var="player" value="#{playersBean.players}" rowKey="#{player.id}" paginator="true" paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" rowsPerPageTemplate="5,10,15" emptyMessage="#{msgs.no_records}" sortBy="#{player.id}" sortOrder="ascending" rows="10" editable="true">
<p:ajax event="rowEdit" listener="#{playersBean.onRowEdit}"/>
<p:column headerText="#{msgs.active}" sortBy="#{player.active}" styleClass="centered-column">
<p:cellEditor>
<f:facet name="output"><p:selectBooleanCheckbox value="#{optionsBean.booleanMap.get(player.active)}" disabled="true"/></f:facet>
<f:facet name="input"><p:selectBooleanCheckbox value="#{player.active}"/></f:facet>
</p:cellEditor>
</p:column>
<p:column styleClass="datatable-row-editor">
<p:rowEditor/>
</p:column>
</p:dataTable>
此表的模型是List,DtoPlayer有一个字段&#34; active&#34;这是一个String,用于保存从Oracle DB中检索的值(&#34; S&#34;&#34; N&#34;用于true和false)。数据表显示正确获取的值,因为我将字符串映射到输出的布尔值。但是当我点击铅笔图标开始编辑行时,复选框总是被取消选中(尽管先前已选中或未选中)。我想这是因为输入facet期望一个布尔值,而是找到一个String。我尝试将facet输入更改为输出:
<f:facet name="input"><p:selectBooleanCheckbox value="#{optionsBean.booleanMap.get(player.active)}"/></f:facet>
但是发生了另一个问题:保存图标(用于保存已编辑的值)没有响应鼠标点击。我想再次发生这种情况是因为现在我在输入中有一个布尔值但我的模型期待一个字符串。
我该如何解决这个问题?我是否必须更改模型,以便“#34; active&#34; field变成一个布尔值,我在我的Java代码中执行映射boolean / String而不是在Facelets中?