找不到具有标识符h的组件:在p:datatable primefaces之外的selectBooleanCheckbox

时间:2013-08-25 19:21:08

标签: ajax jsf-2 primefaces datatable

我的应用程序中有这个代码 我想将h:selectBooleanCheckbox值提交给服务器, h:p:tabView中的selectBooleanCheckbox和p:dataTable外的 我想提交h:selectBooleanCheckbox值 p:ajax process =" scenarioTabViewId:isApprovedBooleanId_checkBox" scenarioTabViewId:isApprovedBooleanId_checkBox这是firefox v23.0创建的复选框ID 和scenarioTabViewId:budgetAnalysisDataTableId这是数据表id 任何一个解释,我该怎么办? 这是.xhtml中的实际代码

<ui:composition template="/template/mastertemplate.xhtml">
  <ui:define name="content">
     <h:form styleClass="form" prependId="false">
       <p:panel id="analysisTheBudgetPenel" header="Analysis The Budget">
           <p:tabView id="scenarioTabViewId" style="width:850px">
              <p:tab title="Scenario One" id="scen">
                  <h:selectBooleanCheckbox id="isApprovedBooleanId_checkBox" value="#{budgetAnalysisAction.budgetScenarioHescoProposalBean.abc}" />
                  <p:scrollPanel style="width:800px; height:auto;">
                  <p:dataTable id="budgetAnalysisDataTableId" rowIndexVar="index" editable="true" resizableColumns="true" value="#{budgetAnalysisAction.budgetScenarioHescoProposalBean.budgetScenarioHescoProposalListBean}" var="budgetScenarioHescoProposalList">
                     <p:ajax event="rowEdit" process="#{scenarioTabViewId:isApprovedBooleanId_checkBox}" listener="#{budgetAnalysisAction.testAjax}" />
// some columns
// closing tags of above

提前致谢

1 个答案:

答案 0 :(得分:2)

首先,删除<h:form prependId="false">。它与ajax不兼容。不要忘记现在给表格一个固定的身份证。

<h:form id="formId" styleClass="form">

其次,process属性在您的情况下是错误的,您正在使用EL表达式,其中组件的cliend ID作为EL范围中的变量。这没有任何意义。只需将它设为普通字符串即可。

可以在以下答案中找到引用正确客户端ID的规则:How to find out client ID of component for ajax update/render? Cannot find component with expression "foo" referenced from "bar"。应用它,它应该看起来像这样(注意:前缀):

process=":formId:scenarioTabViewId:isApprovedBooleanId_checkBox"

另一种方法是将物理复选框组件绑定到视图,如下所示:

<p:selectBooleanCheckbox binding="#{checkbox}" ... />

然后在UIComponent#getClientId()的帮助下引用其客户端ID(也在这里,请注意:前缀):

process=":#{checkbox.clientId}"