【问题标题】:Why can't I set ID for each p:tab in p:accordionPanel为什么我不能为 p:accordionPanel 中的每个 p:tab 设置 ID
【发布时间】:2014-12-10 04:06:42
【问题描述】:

我使用的是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

如何在我的手风琴面板和控制器中的每个选项卡之间链接身份。我尝试在this example 之后对我的代码进行建模,但他们的示例很糟糕,因为它使用标签标题而不是 id。

【问题讨论】:

    标签: jsf primefaces


    【解决方案1】:

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

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

    【讨论】:

    • 我真正需要做的是:stackoverflow.com/questions/27404871/…
    • 您仍然可以使用静态值标识选项卡。因此,您可以调用您的标签 等。如果您有动态数量的标签,您可能希望以编程方式创建这些标签。
    • 不幸的是,由于我在另一个线程中解释的原因,这对我来说并没有真正做到这一点。感谢您的所有想法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 2017-12-01
    • 1970-01-01
    相关资源
    最近更新 更多