首先解释一下:
我动态创建了一个accordeonpanel,在每个Tab中我创建了一个p:datatable(也是动态的)。
我现在必须编辑表格的行,但我的方法在"选择"不叫。 我认为这是因为上面解释的活力。
方法是:evaluationController.deleteIndicator()
有没有人知道如何解决这个问题?
这里是代码:
XHTML:
<!-- **************************************** ACCORDEON **************************************** -->
<p:panel id="mainAccordeonHeader" header="Capacités et dégrés de maîtrise" styleClass="panelSearch">
<h:form id="evalAccordionForm" styleClass="orgForm">
<p:accordionPanel id="evalAccordion"
styleClass="orgAccordion"
value="#{evaluationController.availableCapacitys}"
var="capListItem">
<p:tab id="evalAccordTitle">
<f:facet name="title">
<h:panelGrid columns="4">
<h:outputText value="#{capListItem.name}"/>
<h:outputText value="#{capListItem.isThresholdOfSuccess ? 'Capacité Déterminante' : 'Degré de Maitrise'}" />
<h:outputText value="Nr Indicateurs: #{evaluationController.findNumberOfIndicators(capListItem)}"/>
<h:outputText value="Pondération: #{evaluationController.findCapacityPonderation(capListItem)}"/>
</h:panelGrid>
</f:facet>
<!-- CAPACITY DETAIL-->
<table border="0" >
<thead>
<tr>
<th>
<p>Description</p>
</th>
<th>
<p style="float: right">Pondération</p>
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<p:inputTextarea id="capDescTextArea" rows="3" cols="113" value="#{capListItem.description}" readonly="true"/>
</td>
<td>
<p:inputTextarea style="float: right" id="capPonderationTextArea" rows="1" cols="1" readonly="true" value="#{evaluationController.findCapacityPonderation(capListItem)}"/>
</td>
</tr>
</tbody>
</table>
<p:separator />
<!-- INDICATORS-->
<h:form>
<p:contextMenu for="indicatorTable">
<p:menuitem value="Modifier" update="indicatorTable" icon="ui-icon-wrench" actionListener="#{evaluationcontroller.updateIndicator()}"/>
<p:menuitem value="Supprimer" update="indicatorTable" icon="ui-icon-trash" actionListener="#{evaluationController.deleteIndicator()}"/>
<p:menuitem value="Ajouter" update="indicatorTable" icon="ui-icon-plus" actionListener="#{evaluationController.addIndicator()}"/>
<p:separator/>
<p:menuitem value="Annuler action"/>
</p:contextMenu>
<p:dataTable
id="indicatorTable"
value="#{evaluationController.findIndicatorsByCapacity(capListItem)}"
var="indicator"
editable="true"
tableStyle="indicatorTableStyle"
rowKey="#{indicator.id}"
selection="#{evaluationcontroller.selectedIndicatorRow}" selectionMode="single"
>
<f:facet name="header">Les Indicateurs ( #{evaluationController.findNumberOfIndicators(capListItem)})
</f:facet>
<p:column headerText="Org Ut" >
<h:outputText value ="#{indicator.organizedUt.id}"/>
</p:column>
<p:column headerText="Date">
<h:outputText value ="#{indicator.organizedUt.toString()}"/>
</p:column>
<p:column headerText="Nom">
<h:outputText value ="#{indicator.name}"/>
</p:column>
<p:column headerText="Description" toggleable="false" width="450">
<p:outputLabel value ="#{indicator.description}" />
</p:column>
<p:column headerText="Max" toggleable="false" width="30">
<p:inputTextarea style="float: none" rows="1" cols="1" readonly="true" value="#{indicator.maxPossible}"/>
</p:column>
</p:dataTable>
<p:commandButton styleClass="addButtonStyle" icon="ui-icon-plus" value="Ajouter un indicateur"/>
<p:commandButton styleClass="deleteAllButtonStyle" icon="ui-icon-trash" value="Supprimer tous les indicateurs" actionListener="#{evaluationController.deleteIndicator()}"/>
</h:form>
</p:tab>
</p:accordionPanel>
</h:form>
</p:panel>
CONTROLER:
问题在于:当我选择一行时,不会调用Getter Setter!
public Indicator getSelectedIndicatorRow() {
System.out.println("GETTER - selectedIndicatorRow");
return selectedIndicatorRow;
}
public void setSelectedIndicatorRow(Indicator selectedIndicatorRow) {
this.selectedIndicatorRow = selectedIndicatorRow;
System.out.println("SETTER - selectedIndicatorRow");
}
public void deleteIndicator(){
System.out.println("Function: deleteIndicator");
try {
System.out.println("TRY TO DELETE INDICATOR");
indicatorFacade.remove(selectedIndicatorRow);
List<Indicator> tempIndicatorsList = actualGridHM.get(selectedIndicatorRow.getCapacity());
actualGridHM.remove(selectedIndicatorRow.getCapacity());
tempIndicatorsList.remove(selectedIndicatorRow);
actualGridHM.put(selectedIndicatorRow.getCapacity(), tempIndicatorsList);
System.out.println("INDICATOR DELETED!");
}
catch (Exception e) {
System.out.println("ERROR - DELETE OF INDICATOR NOT WORKED!");
}
有没有人有解决方案?也许是另一种编辑这个动态表的方法(放在动态的手风琴中)??
答案 0 :(得分:0)
您的代码的第一个明显问题是您有两个<h:form>
。您必须删除内部<h:form>
并再次测试。
答案 1 :(得分:0)
请尝试以下方式; 将命令按钮放在数据表底部的小平面中,如
<p:dataTable>
...
<f:facet>
<p:commandButton styleClass="addButtonStyle" icon="ui-icon-plus" value="Ajouter un indicateur"/>
<p:commandButton styleClass="deleteAllButtonStyle" icon="ui-icon-trash" value="Supprimer tous les indicateurs" action="#{evaluationController.deleteIndicator}"/>
</f:facet>
</p:dataTable>
并在命令按钮的操作方法末尾使用“action”属性而不是“actionListener”而不使用“()”,或者在操作方法中添加ActionEvent参数。