2012-01-18 2 views
0

У меня есть страница, где у меня есть статический список, содержащий список продуктов, которые снова сгруппированы в группы товаров. У меня есть кнопка переключения на странице JSP, которая перемещается между включенный и продукты для инвалидов .Code для моего тумблера выглядит следующим образомПерезагрузка одной и той же страницы на основе кнопки переключения, сохраняющей параметры

<h:commandButton value="retrieve" image="#{displayProductsBean.productsToggleImage}" actionListener="#{displayProductsBean.fetchProductsBasedOnStatus}"> 
    <c:choose> 
     <c:when test="${displayProductsBean.productFetchCriteria=='0'}"> 
     <f:attribute name="buttonSelected" value="1" /> 
     </c:when> 
     <c:otherwise> 
     <f:attribute name="buttonSelected" value="0" /> 
     </c:otherwise> 
    </c:choose> 

    </h:commandButton> 

Теперь в управляемом компоненте я в состоянии получить значение кнопки, выбранную и иметь логику для извлечения включить или отключить продукты но я не знаю, как мне вернуться на ту же страницу, а также я не хочу, чтобы список снова перезагружался из DB.Code в моем классе bean следующим образом:

public void fetchProductsBasedOnStatus(ActionEvent event) 
    { 
     System.out.println("The fetchProductsBasedOnStatus in bean is called"); 
     String selected = (String) event.getComponent().getAttributes().get("buttonSelected"); 
     System.out.println("The value of toggle button is"+selected); 
     setProductFetchCriteria(Integer.parseInt(selected)); 
     System.out.println("The value of toggle button is"+this.toString()); 

    } 

Кто-то пожалуйста, помогите мне решить эту проблему .....

ответ

1

Но я не знаю, как бы я вернусь к той же странице

Просто вернуть null или void в действии способ.

, а также я не хочу, чтобы список перезагрузиться снова из БД

Просто не делают этого? Если вы сохраняете bean-компонент в области представления и загружаете списки в конструкторе (post), то те же списки будут сохраняться до тех пор, пока enduser взаимодействует с одним и тем же представлением. Вы не должны использовать теги JSTL, так как это нарушает область просмотра.

Ваш код можно упростить следующим образом:

<h:commandButton value="retrieve" image="#{bean.showDisabledProducts ? 'enabled' : 'disabled'}.png" action="#{bean.toggle}"> 
    <f:ajax render="@form" /> 
</h:commandButton> 

<h:dataTable value="#{bean.products}" ...> 
    ... 
</h:dataTable> 

с

@ManagedBean 
@ViewScoped 
public class Bean { 

    private boolean showDisabledProducts; 
    private List<Product> enabledProducts; 
    private List<Product> disabledProducts; 

    @EJB 
    private ProductService service; 

    @PostConstruct 
    public void init() { 
     enabledProducts = service.listEnabledProducts(); 
     disabledProducts = service.listDisabledProducts(); 
    } 

    public void toggle() { 
     showDisabledProducts = !showDisabledProducts; 
    } 

    public List<Product> getProducts() { 
     return showDisabledProducts ? disabledProducts : enabledProducts; 
    } 

    public boolean isShowDisabledProducts() { 
     return showDisabledProducts; 
    } 

} 
+0

с использованием вышеуказанных аннотаций ManagedBean ViewScoped показывает ошибку мне ... Эти вопросы могут показаться очень тривиальными, но я стартер в JSF ... Еще одна вещь, что атрибут toggle должен быть установлен в управляемый компонент, прежде чем перезагрузка произойдет, но не будет установлена ​​... – Sam

+0

Какая ошибка тогда? Почему бы вам не рассказать об ошибке в деталях? Сообщения об ошибках обычно содержат ответ на проблему. Если вы не понимаете сообщение и не можете его интерпретировать, вы должны поделиться им с нами, чтобы мы могли объяснить это в терминах непрофессионала, чтобы вы, наконец, поняли проблему. Вы знаете, когда проблема понятна *, решение очевидно. – BalusC

+0

Чтобы упростить мой вопрос .. Когда я вернусь к управляемому bean-компоненту с помощью метода прослушивателя действий, я могу воссоздать управляемый bean-компонент, значение которого я отправляю через указанный выше атрибут. У меня есть класс ProductAction, где у меня есть компонент, содержащий список продуктов, которые на самом деле загружают включенные r отключенных продуктов на основе атрибута productFetchCriteria, который может быть 0 или 1 в зависимости от значения, переданного с страницы jsp через атрибут .... – Sam

Смежные вопросы