2

に問題がありActionListenerます。dataTable これは、JSF2.1コンポーネント を含む .xhtml ファイルの一部です。

                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="Delete"></h:outputText>
                        </f:facet>
                        <h:commandButton value="delete" action="#{productManagedBean.delete}" actionListener="#{productManagedBean.setSelectedProduct}">
                            <f:attribute name="selectedProduct" value="#{product}"></f:attribute>
                        </h:commandButton>
                    </h:column>

                </h:dataTable>
            </h:form>

私の問題は、以下のメソッドをvalueforとして使用する場合dataTableです。

public List<Product> getList() {
    List<Product> l = productBean.getList();
    return l;
}

もちろん機能します。製品リストが表示され、クリックcommandButtonして削除する製品を設定し、メソッドを強制できます-しかし、表示しdelete()たいときに、パラメーターがオブジェクトである以下のメソッドを使用します。listCustomerCustomer

public List<Product> getList() {
    List<Product> l = productBean.getList(selectedCustomer);
    return l;
}

この方法を使用すると、製品のリストが顧客に表示されますが、[削除] をクリックしても機能commandButtonActionListenerません。

バッキング Bean:

@Named
@RequestScoped
public class ProductManagedBean {

private Product selectedProduct = new Product();
private Customer selectedCustomer = new Customer();

@EJB
ProductBeanLocal productBean;

public List<Product> getList() {
    //List<Product> l = productBean.getList(selectedCustomer); -- PROBLEM
    List<Product> l = productBean.getList();
    return l;
}

//listener
public void setSelectedProduct(ActionEvent e) {
    selectedProduct = (Product) e.getComponent().getAttributes().get("selectedProduct");
}

EJB コンポーネント:

@Stateless
public class ProductBean implements ProductBeanLocal {

@PersistenceContext(unitName = "CustomerServicePU")
EntityManager em;

@Override
public List<Product> getList() {
    List<Product> list = em.createQuery("SELECT p FROM Product p").getResultList();
    return list;
}

@Override
public List<Product> getList(Customer c) {
    List<Product> list = em.createQuery("SELECT p FROM Product p WHERE p.customer.id = :id").setParameter("id", c.getId()).getResultList();
    return list;
}

なぜそれが機能しないのか、誰にもわかりませんか?

4

0 に答える 0