【问题标题】:Primefaces Confirm Message Updated ValuePrimefaces 确认消息更新值
【发布时间】:2014-06-24 11:26:00
【问题描述】:

我正在尝试在确认对话框消息中显示更新的值,但在这种情况下我不断获得旧值

<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>

豆码:

@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 组件,我在输出文本“50”中得到更新后的金额。但是,在确认按钮消息中,我得到的金额为 0 而不是 50。如何在确认消息中显示更新后的值?

PS: Primefaces-4.0

【问题讨论】:

  • 我在您的确认对话框中没有看到任何消息??
  • 你能展示一下你的backing bean吗?
  • @Makky 位于按钮内的确认组件中
  • @nosnhoj 我已经更新了我的问题,但我认为这是一个客户端问题。我在输出文本中得到了更新的值,但我没有在确认消息中得到它。

标签: jsf primefaces


【解决方案1】:

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

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

在全局模式下,我找不到类似的句子,我尝试在全局模式下使用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>

.


如果是这样:

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

我建议你自己写一个对话框,你也可以像你做的那样从backing bean更改对话框中的消息:

<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>

【讨论】:

    【解决方案2】:

    p:confirm 不实现状态保存,因此在第一个 JSF 生命周期后它会丢失其属性值。它还在视图构建时仅评估一次 EL。

    我将解决方案发布在this answer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-11
      • 2014-09-03
      • 2015-11-14
      • 2012-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-04
      相关资源
      最近更新 更多