【问题标题】:p:commandButton in the second datatable doesn't work第二个数据表中的 p:commandButton 不起作用
【发布时间】:2018-08-14 03:10:51
【问题描述】:

我在同一页面中有两个数据表。第一个在页面加载时加载。单击一行时会加载第二个。我在每一行都有一个命令按钮。在第一个数据表中工作正常。但是,在第二个中,参数值为空。只有当我使用立即属性等于 true 时它才有效。有人知道为什么吗?

我的页面:

<h:form id="form">

   <p:dataTable id="dtOwner" selectionMode="single"  var="owner" value="#{ownerBean.retornaOwners}"
   selection="#{ownerBean.ownerSelected}" rowKey="#{owner.id_owner}">
        <p:ajax update="form:pgCars" process="@form" event="rowSelect" listener="#{ownerBean.onRowSelect}"  />

        <p:column headerText="Actions">
            <p:commandButton value="Exclude" actionListener="#{ownerBean.excludeOwner(owner)}"></p:commandButton>
        </p:column>
        <p:column headerText="Name">
            <h:outputText value="#{owner.name}"></h:outputText>
        </p:column>
        <p:column headerText="Surname">
            <h:outputText value="#{owner.surname}"></h:outputText>
        </p:column>
    </p:dataTable>

    <p:panelGrid id="pgCars">
    <p:dataTable id="dtCars"  var="car" value="#{ownerBean.ownerSelected.listCars}"
   selection="#{ownerBean.ownerSelected}" rowKey="#{owner.id_owner}">

    <p:column headerText="Actions" >
    <p:commandButton value="Exclude" process="@all" update="form" actionListener="#{ownerBean.excludeCar(car)}"></p:commandButton>
    </p:column>

     <p:column headerText="id_Car" >
        <h:outputText value="#{car.id_car}"></h:outputText>
     </p:column>
     <p:column headerText="id_owner" >
        <h:outputText value="#{car.id_owner}"></h:outputText>
     </p:column>
     <p:column headerText="tipo_carro" >
        <h:outputText value="#{car.tipo_carro}"></h:outputText>
     </p:column>
     <p:column headerText="modelo_carro" >
        <h:outputText value="#{car.modelo_carro}"></h:outputText>
     </p:column>
   </p:dataTable>

    </p:panelGrid>

   </h:form>

我的豆子:

package com.tutorial;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import org.primefaces.event.SelectEvent;

@ManagedBean(name="ownerBean")
@SessionScoped
public class OwnerBean {
@ManagedProperty(value = "#{ownerDAO}")
private OwnerDAO ownerDAO;

public void setOwnerDAO(OwnerDAO ownerDAO) {
    this.ownerDAO = ownerDAO;
}

private Owner ownerSelected;

public void excludeOwner(Owner owner) {
    System.out.println("Excluding " + owner.getName());
}

public void excludeCar(Car car) {
    System.out.println("Excluding car " + car.getModelo_carro());
}

public void onRowSelect(SelectEvent event) {
    FacesMessage msg = new FacesMessage("Owner Selected", Integer.toString(   
(   (Owner) event.getObject()).getId_owner()));
    FacesContext.getCurrentInstance().addMessage(null, msg);
    ownerSelected = (Owner) event.getObject();
    ownerSelected.setListCars(new ArrayList<Car>());
    ownerSelected.setListCars(ownerDAO.getCars(ownerSelected));
}

public List<Owner> getRetornaOwners() {
    List<Owner> list = new ArrayList<>();
    try {
        list = ownerDAO.getOwners();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return list;
}


public Owner getOwnerSelected() {
    return ownerSelected;
}


public void setOwnerSelected(Owner ownerSelected) {
    this.ownerSelected = ownerSelected;
}
}

excludeOwner(Owner owner) 函数工作正常,但 excludeCars(Car car) 不能。我的汽车价值总是为空。

谢谢

【问题讨论】:

  • 首先将@all 缩小为“范围更小”,将“表单”更正为@form 甚至@this,然后更正第二个数据表中的选择。跨度>
  • 我在您的第二个数据表中看到 rowKey="#{owner.id_owner}" 对我来说不合适。 rowKey 应该是car.something 因为 car 是第二个数据表的行值,所以我认为您的表不知道选择了什么 ROW。

标签: jsf primefaces datatable


【解决方案1】:

我在 commandButton 中使用 process="@this" 并且可以正常工作。另外,我从 commandButton 中删除了 update 属性,并从 ajax 中删除了 process 属性。非常感谢

阿贾克斯:

<p:ajax update="form:dtCars" event="rowSelect" listener="#{ownerBean.onRowSelect}"  />  

命令按钮:

<p:commandButton value="Exclude" process="@this" actionListener="#{ownerBean.excludeCar(car)}"></p:commandButton>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    相关资源
    最近更新 更多