在a4j内批量打开/关闭collapsiblePanel:重复

时间:2013-08-16 07:33:54

标签: ajax jsf jsf-2 richfaces

我有一个页面,其中有一个包含输入元素的rich:collapsiblePanel列表。这些collapsiblePanel本身将其展开/折叠状态存储在辅助bean中。

现在我有一个用例一次打开/关闭所有这些collapsiblePanels,只需点击一下鼠标。所以我试图通过列表上的两个commandButtons来实现这一点。它们使用附加的actionListener迭代collapsiblePanels的所有辅助bean,并将展开的标志设置为true / false。

这似乎有用,除非你自己打开或关闭其中一个collapsiblePanel。一旦发生这种情况,单击按钮不再执行任何操作。

<h:form prependId="false">

  <a4j:commandButton value="Open All"  actionListener="#{viewBean.doOpenAll}" render="c" />
  <a4j:commandButton value="Close All" actionListener="#{viewBean.doCloseAll}" render="c" style="margin-left: 10px;" />

  <a4j:outputPanel id="c">
    <a4j:repeat id="repeat" value="#{viewBean.items}" var="item">
      <rich:collapsiblePanel id="panel" expanded="#{item.expanded}">
          <h:outputLabel id="text_lbl" value="text" />
        <h:inputText id="text" value="#{item.text}" />
      </rich:collapsiblePanel>
    </a4j:repeat>
  </a4j:outputPanel>

</h:form>

我已发布a project on github,以便您可以尝试使用代码。

为了完整性,这里有两个支持豆

@ViewScoped
@ManagedBean
public class ViewBean implements Serializable {
    static final Logger LOG = LoggerFactory.getLogger(ViewBean.class);

    private static final long serialVersionUID = -6239437588285327644L;
    private List<ListItem> items;

    public ViewBean() {
        items = new ArrayList<ListItem>(10);
        for (int i = 0; i < 10; i++) {
            items.add(new ListItem("item " + i));
        }
    }

    public void doOpenAll() {
        LOG.debug("open all");
        for (ListItem item : items) {
            item.setExpanded(true);
        }
    }

    public void doCloseAll() {
        LOG.debug("close all");
        for (ListItem item : items) {
            item.setExpanded(false);
        }
    }

    public List<ListItem> getItems() {
        return items;
    }

}
public class ListItem {

    private boolean expanded;
    private String text;

    public ListItem(String text) {
        super();
        this.text = text;
    }

    public boolean isExpanded() {
        return expanded;
    }

    public void setExpanded(boolean expanded) {
        this.expanded = expanded;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

}

1 个答案:

答案 0 :(得分:2)

这可能与此RichFaces错误有关?!:https://issues.jboss.org/browse/RF-11546