に問題があり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>
私の問題は、以下のメソッドをvalue
forとして使用する場合dataTable
です。
public List<Product> getList() {
List<Product> l = productBean.getList();
return l;
}
もちろん機能します。製品リストが表示され、クリックcommandButton
して削除する製品を設定し、メソッドを強制できます-しかし、表示しdelete()
たいときに、パラメーターがオブジェクトである以下のメソッドを使用します。list
Customer
Customer
public List<Product> getList() {
List<Product> l = productBean.getList(selectedCustomer);
return l;
}
この方法を使用すると、製品のリストが顧客に表示されますが、[削除] をクリックしても機能commandButton
しActionListener
ません。
バッキング 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;
}
なぜそれが機能しないのか、誰にもわかりませんか?