在 <p:confirm对话框中显示之前更新 Bean 消息值>



谁能告诉我如何更改<p: confirm>的消息?当您单击按钮时,我希望messageCount ()方法返回值消息。

...
<p:outputLabel value="Test:" />                        
<p:inputText value="#{testController.fieldTest}" id="fieldTest"/>
...
<p:commandButton value="Ok" action="#{testController.cadTest()}">
    <p:confirm id="messageConfirm" header="Test" />
</p:commandButton>
...
<p:confirmDialog global="true" showEffect="fade" hideEffect="fade">
    <f:facet name="message">
        <p:outputPanel>
            <h:outputFormat id="message" value="#{testController.mensagemConfirm}" escape="false"/>
        </p:outputPanel>
    </f:facet>
    <p:commandButton value="Yes" type="button" styleClass="ui-confirmdialog-yes" icon="ui-icon-check" />
    <p:commandButton value="No" type="button" styleClass="ui-confirmdialog-no" icon="ui-icon-close" />
</p:confirmDialog>
...

//TestController
private String mensagemConfirm;
private Integer count = 0;

public Integer messageCount() {
    return count++;
}
public String getMensagemConfirm() {
    setMessageConfirm("Count: " + messageCount());
    return mensagemConfirm;
}
public void setMensagemConfirm(String mensagemConfirm) {
    this.mensagemConfirm = mensagemConfirm;
}

的例子:

  • 首先点击"Ok" (<p:commandButton>)

    -> confirmDialog消息:Count: 1(点击"No")

  • 第二次点击"确定"(<p:commandButton>)

    -> confirmDialog消息:Count: 2(点击"No")

  • 第三次点击"Ok" (<p:commandButton>)

    -> confirmDialog消息:Count: 3(点击"No")

这里的问题是,p:confirm将不会执行您的服务器端代码,直到您在confirmDialog中按下"yes"。因此,您必须先执行服务器端代码,并在ajax请求完成后显示确认对话框。

您可以通过显示带有oncomplete属性的确认对话框来完成:

    <p:commandButton value="Ok" update="conf" action="#{testController.increaseCount()}" oncomplete="PF('confirmVar').show()"/>
    <p:confirmDialog id="conf" global="true" showEffect="fade" hideEffect="fade" widgetVar="confirmVar">
        <p:commandButton value="Yes" action="#{testController.cadTest()}" styleClass="ui-confirmdialog-yes" icon="ui-icon-check" oncomplete="PF('confirmVar').hide()"/>
        <p:commandButton value="No" styleClass="ui-confirmdialog-no" icon="ui-icon-close" oncomplete="PF('confirmVar').hide()"/>
        <f:facet name="message">
            <p:outputPanel>
                <h:outputFormat value="Count: #{testController.count}" escape="false"/>
            </p:outputPanel>
        </f:facet>
    </p:confirmDialog>

在纯getter/setter中执行应用程序逻辑代码的设计也很糟糕。使用专门的方法。

testController bean:

private int count;
public int getCount() {
    return count;
}
public void setCount(int count) {
    this.count = count;
}
public void increaseCount() {
   count++;
}

根据您的解释,似乎您只想在用户点击"No"后增加count

因此,您可以在commandButton中使用actionListener属性,它将使用ajax请求调用增量方法:
<p:commandButton value="No"  actionListener="#{testController.incrementCount()}" ajax="true" styleClass="ui-confirmdialog-no" icon="ui-icon-close"/>
    请注意,我删除了属性type=button,如果我没有,它不会调用方法

显示当前值:

 <h:outputFormat id="message" value="Count: #{testController.count}" escape="false"/>

控制器:

Integer count = 0;
public void incrementCount() {
   count++;
}
public Integer getCount(){
   return count;
}

相关内容

  • 没有找到相关文章

最新更新