java - 基于保留参数的切换按钮重新加载同一页面

标签 java jsf jsf-2

我有一个页面,其中有一个静态列表,其中包含再次分组为产品组的产品列表。我在 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>

现在,在托管 bean 中,我能够获取所选按钮的值,并具有检索启用或禁用产品的逻辑 但我不知道如何回到同一页面,而且我也不希望再次从 DB 重新加载列表。我的 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());

    }

请有人帮我解决这个问题......

最佳答案

But I don't know how would I get back to the same page

只需在操作方法中返回 nullvoid 即可。

and also I don't want the list to be reloaded again from the DB

就不要这样做吗?如果将 bean 保留在 View 范围内并在(后)构造函数中加载列表,那么只要最终用户与同一 View 交互,就会保留相同的列表。您不应该使用 JSTL 标记,因为它会破坏 View 范围。

您的代码可以简化如下:

<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;
    }

}

关于java - 基于保留参数的切换按钮重新加载同一页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8907747/

相关文章:

javascript - p :dialog not showing in tabs on tabview

java - 如何获取android中特定区域的坐标?

java - 将实例变量与对象结合使用

java - 广播接收器未接收到广播

css - 如何将两个 primefaces growl 放在同一页面的不同位置?

java - Eclipse - 找不到 uri http ://java. sun.com/jsf/html 的 facelet 标签库

java - 推荐 JSP 表标签库吗?

jsf - <h :selectOneMenu> value change listener invoked for all dropdowns instead of only the current

jsf-2 - 如何在页面重新加载时保持JSF Flash作用域参数?

java - 命令按钮问题