3

我在我的应用程序中有此代码我想将 h:selectBooleanCheckbox 值提交到服务器,h:selectBooleanCheckbox 在 p:tabView 内部和 p:dataTable 外部我想从 p:ajax process="scenarioTabViewId:isApprovedBooleanId_checkBox"scenarioTabViewId 提交 h:selectBooleanCheckbox 值: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

提前致谢

4

1 回答 1

2

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

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

其次,process在您的情况下,该属性是错误的,您使用的是带有组件客户端 ID 的 EL 表达式作为 EL 范围内的变量。这没有任何意义。把它变成一个普通的字符串。

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

process=":formId:scenarioTabViewId:isApprovedBooleanId_checkBox"

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

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

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

process=":#{checkbox.clientId}"
于 2013-08-25T19:42:35.143 回答