所以,我最近开始使用richfaces 4开发一个JSF页面,其中我有一个 rich:collapsiblePanel 。我遇到了一个问题,我在 rich:dataGrid 中使用了collapsiblePanel,它通过迭代从服务器收到的列表来呈现collapsiblePanel。有一个链接到' sort' collapsiblePanels根据面板标题中的数据(当然在后备bean中)。展开任何collapsiblePanel并单击排序链接时,所有这些都会展开,而所有展开都会展开,如果一个已关闭,再次点击链接,所有链接都会关闭。
我尝试过的事情:
目前的示例代码:
<h:panelGrid id="SomePanelGrid">
<rich:dataGrid id="SomeDataGrid" value="bean.listValues" var="values"
iterationStatusVar="counter" elements="10">
<rich:collapsiblePanel switchType="client" expanded="#{bean.expanded}">
Layouts and what not (not in relation to this)
</rich:collapsiblePanel>
</rich:dataGrid>
</h:panelGrid>
链接只调用辅助bean中的一个方法来进行排序。
我发现了一个类似的问题,涉及dataTable而不是dataGrid,虽然没有给出答案,但只有链接导致更多的死胡同。可在以下网址找到:https://community.jboss.org/message/819938
非常感谢任何帮助。不幸的是,目前我没有太多时间回答其他问题,但稍后我会回来查看。
提前致谢。
答案 0 :(得分:0)
您的代码中存在许多语法缺陷,以下是它的外观:
<h:panelGrid id="SomePanelGrid">
<rich:dataGrid id="SomeDataGrid" value="#{bean.listValues}" var="values"
iterationStatusVar="counter" elements="10">
<rich:collapsiblePanel switchType="client" expanded="#{bean.expanded}">
Layouts and what not (not in relation to this)
</rich:collapsiblePanel>
</rich:dataGrid>
</h:panelGrid>
您的示例中可能只遇到一个 collapsiblePanel,此代码经过修改和测试正常工作。
现在,如果您想通过AJAX刷新dataGrid时保存collapsiblePanels展开状态,则需要添加一些东西。
首先,您需要向正在迭代的对象添加一个属性,以保存每个面板的状态。
public class Item
{
private boolean expanded;
public void setExpanded(boolean expanded)
{
this.exanded = expanded;
}
public boolean getExpanded()
{
return this.expanded;
}
// Your other stuff
}
第二次,您需要在bean中添加一个侦听器,以了解用户何时更改面板的状态,请注意该属性以获取与此面板相关的项目。
@ManagedBean
@ViewScope
public class Bean
{
private List<Item> listValues;
@PostConstruct
void init()
{
listValues = //... Some initialization to your list
}
public List<Item> getListValues()
{
return this.listValues;
}
public void toggle(PanelToggleEvent event)
{
// Take the current item
Item item = (Item)event.getComponent().getAttributes().get("item");
// Save the current state in the item
item.setExpanded(event.getExpanded());
}
}
最后,您需要将switchType
更改为AJAX并在代码中添加侦听器,而不会忘记需要在侦听器中传递的属性。
<h:form>
<rich:dataGrid id="SomeDataGrid" value="#{bean.listValues}" var="item"
iterationStatusVar="counter" elements="10">
<rich:collapsiblePanel switchType="ajax" expanded="#{item.expanded}">
<f:attribute name="item" value="#{item}" />
Layouts and what not (not in relation to this)
</rich:collapsiblePanel>
</rich:dataGrid>
</h:form>