为什么我不能为p:accordionPanel中的每个p:tab设置ID

时间:2014-12-10 04:06:42

标签: jsf primefaces

我使用p:accordionPanel代替p:dataTable。每次更改选项卡时,我都想重置控制器中活动选项卡的实体ID。 IOW,如果accordionPanel中的选项卡对应ID为1,2,3的实体,当我选择一个时,我希望控制器中的activeEntityID变量重置为相应的ID:

<p:accordionPanel value="#{litigController.appealsForCase}" var="appeal">
    <p:ajax event="tabChange" listener="#{litigController.setSelectedAppeal}"/>
    <p:tab id="#{appeal.appealID}" title="Appellate Court No #{appeal.appelateCourtNo}">

控制器方法:

public void setSelectedAppeal(TabChangeEvent event) {
        this.activeAppealID = event.getTab().getId();
        System.out.println("tab change for appealID " + this.activeAppealID);
    }

但是,我得到IllegalArgumentException

 java.lang.IllegalArgumentException: Empty id attribute is not allowed

如何在accordionPanel和控制器中的每个标签之间链接标识。我尝试在this example之后对我的代码进行建模,但是他们的示例很差,因为它使用标签标题而不是id。

1 个答案:

答案 0 :(得分:1)

您不能以这种方式在id属性中使用EL。 JSF不允许这样做。在视图构建期间,id属性应该可用,但在视图渲染时评估EL。这太晚了,所以在检查id时,它是空的。

另外看看这个: Using id="#{...}" causes java.lang.IllegalArgumentException: Empty id attribute is not allowed