2

我使用 Primefaces 轮播组件来显示项目列表。我想做的是在每个轮播项目上显示一个命令按钮,它会触发 bean 上的方法来确认或拒绝条目。

现在它只适用于轮播的第一个条目。单击另一个条目不会调用操作 confirmResource。我想这与ID有关,但我无法弄清楚。

这是表格:

<h:form id="form" prependId="false">
<p:carousel id="resourceCarousel" value="#{resourceRatingBean.resourceProposalList}" var="var" rows="1" itemStyle="width:500px; height: 400px; text-align:center;" circular="true">
    <p:column>

        <h:panelGrid columns="1" cellpadding="3">
            <p:graphicImage value="/cache/images/#{var.imagePath}" width="100"/>
            <h:outputText value="#{var.imagePath}" />
            <h:outputText value="#{var.name}" />
            <h:outputText value="#{var.description}" />
        </h:panelGrid>

        <p:commandButton value="confirm" action="#{resourceRatingBean.confirmResource}" process="@this">
            <f:setPropertyActionListener value="#{var}" target="#{resourceRatingBean.ratedResource}" />
        </p:commandButton>

    </p:column>
</p:carousel>
</h:form>
4

1 回答 1

4

我在这里看到两个可能的问题:

  1. process="@this"可能是一个问题,因为这只会调用命令按钮的调用操作过程,而不是轮播组件中的更改。尝试将此属性设置为resourceCarouselor @form

  2. 如果您仍然遇到问题并使用 JSF 2 + EL 2.2,那么您可以通过EL 表达式将参数传递给方法,而不是依赖于setPropertyActionListener设置托管属性的值。varactionListener

这是一个例子:

<p:commandButton value="confirm" actionListener="${resourceRatingBean.confirmResourceListener(var)}"
    this="resourceCarousel" />
于 2012-07-31T11:07:45.343 回答