Primefaces确认消息更新值

时间:2014-06-24 11:26:00

标签: jsf primefaces

我试图在确认对话框消息中显示更新的值,但我不断获得旧值,如此场景

<h:form>
    <p:inputText value="#{bean.object.amount}"/>
    <p:commandButton value="CALCULATE" update="cal" actionListener="#{bean.calculate()}"/>

    <h:panelGroup id="cal">
        <h:outputText value="#{bean.object.amount}"/>
        <p:commandButton value="SUBMIT" actionListener="#{bean.submit()}">
             <p:confirm header="Confirmation" message="Amount is : #{bean.object.amount} ?"/>
        </p:commandButton>

        <p:confirmDialog global="true">
             <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>
    </h:panelgGroup/>

</h:form>

Bean代码:

@ManagedBean(name="bean")
@ViewScoped
public class Bean implements Serializable {
       private SomeClass object;

       @PostConstruct
       public void init(){
            this.object = new SomeClass();
       }

        public void calculate(){
            //do some colculation (not related to amount field in object)
        }

        public void submit(){
             //submit to database
        }

        //getter setter

}

当我输入金额中的值时,让我们说50.并更新cal组件我在outputtext&#34; 50&#34;中获得更新的金额。但是,在确认按钮消息中,我将金额改为0而不是50.如何在确认消息中显示更新的值?

PS: Primefaces-4.0

2 个答案:

答案 0 :(得分:2)

在确认对话框部分中查看user guide的primefaces,在非全局模式中提到文档:

  

消息方面是   如果您需要放置自定义内容而不是简单文本,则非常有用。

在全局模式下,我找不到类似的类似句子,我尝试在全局模式下使用facet但它不起作用。所以,

您是否真的多次使用此确认对话框?

如果不是:

我建议您删除全局参数并更改代码,如下所示:

<h:form>
        <p:inputText value="#{bean.object.amount}"/>
        <p:commandButton value="CALCULATE" update="cal" actionListener="#{bean.calculate()}"/>

        <h:panelGroup id="cal">
            <h:outputText value="#{bean.object.amount}"/>
            <p:commandButton value="SUBMIT" actionListener="#{bean.submit()}" oncomplete="PF('confirmDlg').show()"/>

            <p:confirmDialog header="Confirmation" widgetVar="confirmDlg">
                <f:facet name="message">
                    <h:outputText value='Amount is : #{bean.object.amount} ?'/>
                </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>
        </h:panelGroup>

</h:form>


如果是这样:

(您确实多次使用确认对话框,并且厌倦了使用相同形式但不同消息编写多个对话框。)

我建议你自己编写一个对话框,你也可以改变对话框中的消息,就像你做的那样:

<h:form id="myForm">
        <p:inputText value="#{bean.object.amount}"/>
        <p:commandButton value="CALCULATE" update="cal" actionListener="#{bean.calculate()}"/>

        <h:panelGroup id="cal">
            <h:outputText value="#{bean.object.amount}"/>
            <ui:param name="message" value="Amount is :#{bean.object.amount}?" />
            <p:commandButton value="SUBMIT" actionListener="#{bean.setMessage(message)}" action="#{bean.submit()}" update="myForm:myDialog" oncomplete="PF('myDlg').show()"/>
        </h:panelGroup>

        <p:dialog id='myDialog' widgetVar="myDlg" header="Confirmation" modal="true" resizable="false">
            <h:panelGrid columns="3">
                <h:panelGroup styleClass="ui-icon ui-icon-alert" style="float:right"/>
                <h:outputText value="#{bean.message}"/>
                <h:outputText/>

                <h:outputText/>
                <p:commandButton value="Yes" type="button" icon="ui-icon-check" oncomplete="PF('myDlg').hide()"/>
                <p:commandButton value="No" type="button" icon="ui-icon-close" onclick="PF('myDlg').hide()"/>
            </h:panelGrid>
        </p:dialog>
</h:form>

答案 1 :(得分:1)

p:确认没有实现状态保存,因此它失去了它的属性&#39;第一个JSF生命周期之后的值。它还在视图构建时仅对EL进行一次评估。

我在this answer发布了解决方案。