我在表单中有关于引用的问题。 在同一形式,我有一个 - 使用标签生成的表格 - 面板,允许用户编辑单元格内容(具有多个输入和信息)
我使用<p:commandButton>
和<f:setPropertyActionListener>
来存储单元格值并刷新详细信息面板。这部分没问题。
当用户的编辑结束时,他通过点击&#34;保存&#34;来保存其更改。详细面板中的按钮。我只想刷新以前选择的单元格,而不是整个表格。 所以我有一个保存Component.clientId并放置一个&#34; renderer = xxx&#34;在按钮上确保id不为空。
但它总是抛出javax.faces.FacesException ...
<table class="measureTable" id="measureTable">
<!-- header -->
<tbody ... >
<tr class="ui-column-title">
<th ...> ...</th>
<ui:repeat var="columnHeader" value="#{managedBean.columnModels}" id="columnHeaders" >
<th ><p:outputLabel value="#{columnHeader.name}" /></th>
</ui:repeat>
</tr>
<!-- datas -->
<ui:repeat var="vLine" value="#{managedBean.roundvLines}" id="lines" >
<tr>
<td >
<p:panel styleClass="cellPanel">
<p:outputLabel value="#{vLine.id}" styleClass="ui-column-header" />
</p:panel>
</td>
<ui:repeat var="vCell" value="#{vLine.cells}" id="cells">
<td>
<p:commandButton styleClass="cellPanel" value="#{vCell.value}" update=":formControl:detailPanel" >
<f:setPropertyActionListener value="#{vCell}" target="#{managedBean.currentCell}" />
<f:setPropertyActionListener value="#{component.clientId}" target="#{managedBean.currentComponentId}" />
</p:commandButton>
</td>
</ui:repeat>
</tr>
</ui:repeat>
</tbody>
</table>
<p:panel id="detailPanel">
<p:panel rendered="#{!empty managedBean.currentCell}" styleClass="panelWithoutBorder">
<ui:param name="definition" value="#{managedBean.currentCell.measureDefinition}"/>
<ui:param name="measure" value="#{managedBean.currentCell}"/>
<p:panel id="detailValue" header="Valeur">
<!-- NUM -->
<p:keyboard value="#{measure.value}" keypadOnly="true"
rendered="#{definition.codeTypeSais == 1}" />
<!-- STR -->
<p:keyboard value="#{measure.value}"
rendered="#{definition.codeTypeSais == 2}"/>
...
</p:panel>
...
<p:panel>
<p:commandButton value="refresh" update=":formControl:specimen:0"
rendered="#{!empty managedBean.currentComponentId}"></p:commandButton>
</p:panel>
</p:panel>
</p:panel>
GRAVE:javax.faces.FacesException:找不到带表达式&#34;的组件:formControl:lines:0:cells:0:j_idt20&#34;引自&#34; j_idt36&#34;。 在org.primefaces.expression.SearchExpressionFacade.resolveComponentInternal(SearchExpressionFacade.java:422) 在org.primefaces.expression.SearchExpressionFacade.resolveComponentForClient(SearchExpressionFacade.java:200) 在org.primefaces.expression.SearchExpressionFacade.resolveComponentsForClient(SearchExpressionFacade.java:147) at org.primefaces.util.AjaxRequestBuilder.addExpressions(AjaxRequestBuilder.java:92) 在org.primefaces.util.AjaxRequestBuilder.update(AjaxRequestBuilder.java:85) 在org.primefaces.renderkit.CoreRenderer.buildAjaxRequest(CoreRenderer.java:356) 在org.primefaces.component.commandbutton.CommandButtonRenderer.buildRequest(CommandButtonRenderer.java:123) ...
我已经阅读了以下主题:
use-an-el-expression-to-pass-a-component-id-to-a-composite-component-in-jsf
我无法使用绑定,因为组件是自动生成的,而且太多了。
组件已经存在,因为页面没有改变。 我试过只更新顶部/左侧单元格,使用堆栈跟踪的id gaven,但仍然抛出异常。 它仅在我更新整个表单时有效(update =&#34;:formControl&#34;)...:S
我该如何解决?
PS:我使用的是primefaces,但最终终端是一个老公司android 2.3.4,默认浏览器,很多东西都没有用,所以我必须手动完成。答案 0 :(得分:0)
我在2周前在PrimeFaces中解决了这个问题,并对SearchExpressionFramework进行了一些其他改进。 请尝试后备箱构建 - 如果它不起作用,请创建一个问题请+完整示例。