2014-09-10 1 views
0

Когда я нажимаю кнопку, которая вызывает метод фильтрации выбранных элементов, каждый элемент, выбранный параметром, является false, даже если флажок для него установлен. Это похоже на значение флажка selectBoolean, всегда false. Я не понимаю эту проблему. Почему он не установит значения в true?JSF selectBooleanCheckbox значение в DataTable allways false

У меня есть страница JSF с DataTable:

<h:dataTable value="#{productManagedBean.showProducts()}" var="item"> 
    <h:column> 
     <f:facet name="header"> 
     <h:outputText value="Select"/> 
     </f:facet> 
     <h:selectBooleanCheckbox value="#{item.selected}"></h:selectBooleanCheckbox> 
    </h:column> 
<h:column> 
    <f:facet name="header"> 
     <h:outputText value="Image"/> 
    </f:facet> 
    <div class="container-images-product-list"> 
     <h:graphicImage value='#{item.product.image}' class="images-product-list" /> 
    </div> 

<h:form> 
    <h:commandButton value="Delete selected product/s" class="pure-button pure-button-primary" action="#{productManagedBean.filterCheckedItems()}"></h:commandButton> 
</h:form> 

Класс элементов, содержащихся в DataTable:

public class ProductSelection { 
    private Product product; 
    private boolean selected; 

    public ProductSelection(Product product) { 
     this.product = product; 
    } 

    public ProductSelection(Product product, boolean selected) { 
     this.product = product; 
     this.selected = selected; 
    } 

    public Product getProduct() { 
     return product; 
    } 

    public void setProduct(Product product) { 
     this.product = product; 
    } 

    public boolean isSelected() { 
     return selected; 
    } 

    public void setSelected(boolean selected) { 
     this.selected = selected; 
    } 
} 

методы в ManagedBean:

public List<ProductSelection> showProducts(){ 
    if(itemsShown == false) { 
     list = productSessionBean.getAllProducts(); 
     for(Product p: list){ 
      selectionList.add(new ProductSelection(p)); 
     } 
     itemsShown = true; 
    } 
    for (ProductSelection p: selectionList) { 
     p.getProduct().setImage("../uploaded/" + p.getProduct().getImage()); 
    } 
    return selectionList; 
} 

public void filterCheckedItems(){ 
    for (ProductSelection p: selectionList) { 
     if(p.isSelected()){ 
      checkedList.add(p.getProduct()); 
     } 
    } 
} 
+0

Похоже, что 'selectionList' пуст или что-то еще. Распечатайте 'p.isSelected()' в консоли и попробуйте удалить/проверить многие из продуктов, отображаемых в списке. – Omar

ответ

1

пожалуйста, место в DataTable и CommandButton в той же форме, затем повторите попытку. в настоящее время похоже, что ваш выбор флажка не представлен, потому что dataTable не вложен в ту же форму.