首页 > 解决方案 > 如何通过切换监听器更改表格元素

问题描述

我有一个 primefaces 11 项目。在我的网站上有一个数据表,其中包含我的自定义类的一些元素。一个属性是一个活动标志,它在我的表中由一个切换开关表示。如果您想更改记录的任何属性,您必须使用可以正常工作的更改按钮。但是我认为如果您可以即时切换激活会更容易。所以我用一个ajax监听器做了一个切换开关。该表如下所示:

<p:dataTable id="dt-queries" widgetVar="dtQueries" reflow="true"
  showGridlines="true" size="small" var="querie"
  value="#{abfrageHandler.abfragen}" rowKey="#{querie.pk}" >
  <p:column headerText="Abfrage">
    <h:outputText value="#{querie.name}" />
  </p:column>
  <p:column headerText="Zyklus">
    <h:outputText value="#{querie.zyklus.displayName}" />
  </p:column>
  <p:column headerText="Typ">
    <h:outputText value="#{querie.typ.displayName}" />
  </p:column>
  <p:column headerText="System">
    <h:outputText value="#{querie.refSystem}" />
  </p:column>
  <p:column headerText="Aktiv">
    <p:toggleSwitch id="active" value="#{querie.active}" >
      <p:ajax listener="#{abfrageHandler.toggleActive}"/>
    </p:toggleSwitch>
  </p:column>
  <p:column exportable="false">
    <p:commandButton icon="pi pi-search"
      actionListener="#{abfrageHandler.startAbfrage(querie)}"
      styleClass="edit-button rounded-button ui-button-success"
      process="@this">
    </p:commandButton>

    <p:commandButton icon="pi pi-pencil"
      update="abfrageForm:manage-queries-content"
      oncomplete="PF('manageQueriesDialog').show()"
      styleClass="edit-button rounded-button ui-button-success"
      process="@this">
      <f:setPropertyActionListener value="#{querie}"
        target="#{abfrageHandler.selected}" />
      <p:resetInput target="abfrageForm:manage-queries-content" />
    </p:commandButton>

    <p:commandButton class="ui-button-warning rounded-button"
      icon="pi pi-trash" process="@this"
      oncomplete="PF('deleteQuerieDialog').show()">
      <f:setPropertyActionListener value="#{querie}"
        target="#{abfrageHandler.selected}" />
    </p:commandButton>
  </p:column>
</p:dataTable>

目前我的 toggleActive 方法如下所示:

public void toggleActive(AjaxBehaviorEvent event) {
  System.out.println("Funktion called");
  Object a = event.getSource();
  a.toString();
}

我遇到了事件类型的问题,因为所有primefacesevents 都不起作用,该函数从未被ToggleEvent 或AbstractAjaxBehaviorEvent 调用。如果我可以看到发生了一些事情,但我无法确定它是为谁发生的,所以我无法直接坚持更改。

你能帮我如何识别当前记录吗?

标签: jsfprimefaces

解决方案


推荐阅读