有条件地打开全​​局p:confirmDialog,p:确认

时间:2014-10-20 14:17:13

标签: jsf jsf-2 primefaces dialog

我想基于bean布尔值打开全局p:confirmDialog。我想有这样的事情:

<p:commandButton value="Save" actionListener="#{bean.save}" 
                 update="@form" oncomplete="jsfunction();">
    <p:confirm header="Confirm" message="Are you sure?" rendered="#{bean.boolean}"/>
</p:commandButton>

但渲染在那里不起作用(我希望)。

此外,我不想复制p:commandButton并使用其呈现的属性来实现此目的。

有没有办法在不改变太多东西的情况下完成这项工作?我必须在很多按钮中完成它。

4 个答案:

答案 0 :(得分:10)

我知道这个问题有点陈旧,但我最近在条件/动态确认方面遇到了同样的问题,上述解决方案都没有对我有用。

经过一些测试后,我使用禁用的属性(在PrimeFaces 6.0中引入)构建了我的按钮,如下所示:

<p:confirmDialog global="true">
    <p:commandButton value="Yes" type="button" />
    <p:commandButton value="No" type="button" />
</p:confirmDialog>

<p:commandButton actionListener="#{myBean.myMethod} value="Submit">      
    <p:confirm header="Confirmation" message="Are you sure?" disabled="#{myBean.boolean}"/>
</p:commandButton>

答案 1 :(得分:3)

有点hacky,但你可以在commandButton和p:confirm标签之间使用JSTL“c:if”标签。由于JSTL标记在Facelet页面的执行流程中较早被解释,因此p:confirm标记不会抱怨其父级不是有效的commandButton。例如:

      <p:commandButton action="#{myBean.myMethod} value="Submit">
          <c:if test="#{myBeanBean.warningEnabled}">
            <p:confirm header="Confirmation" message="#{myBean.warningMessage}" icon="ui-icon-alert"/>
          </c:if>
      </p:commandButton>

答案 2 :(得分:1)

要尝试的一件事是使用布尔值来呈现<p:confirmDialog>

<p:commandButton value="Save" actionListener="#{bean.save()}" 
                 update="@form" oncomplete="jsfunction();">
    <p:confirm header="Confirm" message="Are you sure?" />
</p:commandButton>

<p:confirmDialog global="true" rendered="#{bean.boolean}">
    <p:commandButton value="Yes" type="button"  />
    <p:commandButton value="No" type="button" />
</p:confirmDialog>

如果这对您不起作用,我看到的另一种方法是您要避免的两个<p:commandButton>选项。

答案 3 :(得分:0)

您必须使用可见而不是渲染。代码将是这样的:

    <p:commandButton value="Save" actionListener="#{bean.save()}" 
                 update="@form" onstart="dlgWgt.show();" oncomplete="jsfunction();">
    <p:confirm header="Confirm" message="Are you sure?" />
</p:commandButton>

<p:confirmDialog global="true" visible="false" widgetVar="dlgWgt">
    <p:commandButton value="Yes" type="button"  />
    <p:commandButton value="No" type="button" />
</p:confirmDialog>

如果您需要显示oncomplete对话框,请在正确的事件中设置dlgWgt.show()。