Перезагрузка той же страницы на основе кнопки переключения, сохраняющей параметры - PullRequest
0 голосов
/ 18 января 2012

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

 <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 в моем классе бинов:

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 Ответ

1 голос
/ 18 января 2012

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

Просто верните null или void в методе действия.

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

Только не делай этого? Если вы сохраняете bean-компонент в области просмотра и загружаете списки в конструкторе (post), то те же списки будут сохраняться, пока конечный пользователь взаимодействует с тем же представлением. Вы не должны использовать только теги 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;
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...