Jsf 2 在JSF托管Bean中使用action方法时,如何显示confirm(richfaces)弹出窗口?

Jsf 2 在JSF托管Bean中使用action方法时,如何显示confirm(richfaces)弹出窗口?,jsf-2,richfaces,Jsf 2,Richfaces,也许我们熟悉Javascript中的确认弹出窗口。但是,在本例中,我想基于richFaces中的popupPanel创建一个自定义确认弹出窗口,该弹出窗口有两个要求: 我可以将确认框的要求描述如下: 在应用程序有效数据(由ManagedBean中的一个操作方法处理)之后,会出现自定义确认框,它要求用户确认将数据插入数据库 与使用window.confirm时不同,单击页面中的按钮后会出现confirm框 用户确认此窗口,将实现向数据库插入数据的操作方法 我现在想到的一个解决方案是使用两个动

也许我们熟悉Javascript中的确认弹出窗口。但是,在本例中,我想基于richFaces中的popupPanel创建一个自定义确认弹出窗口,该弹出窗口有两个要求:

我可以将确认框的要求描述如下:

  • 在应用程序有效数据(由ManagedBean中的一个操作方法处理)之后,会出现自定义确认框,它要求用户确认将数据插入数据库

    • 与使用window.confirm时不同,单击页面中的按钮后会出现confirm框

  • 用户确认此窗口,将实现向数据库插入数据的操作方法


  • 我现在想到的一个解决方案是使用两个动作的方法来处理一个弹出窗口。当我解决问题时,我会通知你这个问题。谢谢。

    是的,一种方法是使用两种操作方法:一种用于验证,另一种用于实际操作。事实上,在一些项目中,我自己就是这样做的

    一个很好的方法是创建一个包装此功能的复合组件,以便您可以在其他地方重用它

    WebContent/resources/my/confirbutton.xhtml
    中创建一个复合组件,代码如下:

    resources/my/confirButton.xhtml

    <html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
      xmlns:a4j="http://richfaces.org/a4j" xmlns:rich="http://richfaces.org/rich"
      xmlns:cc="http://java.sun.com/jsf/composite">
    <cc:interface>
        <cc:attribute name="message" default="Do you want to proceed?" />
        <cc:attribute name="messageHeader" default="Confirm" />
        <cc:attribute name="action" required="true"
               method-signature="java.lang.String action()" />
        <cc:attribute name="validateMethod" required="true"
               method-signature="java.lang.String action()" />
        <cc:attribute name="value" default="Submit" />
        <cc:attribute name="cancelBtn" default="No" />
        <cc:attribute name="confirmBtn" default="Yes" />
    </cc:interface>
    <cc:implementation>
        <rich:popupPanel id="popup" header="#{cc.attrs.messageHeader}">
            <p>#{cc.attrs.message}</p>
            <input type="button" value="#{cc.attrs.cancelBtn}"
                onclick="#{rich:component('popup')}.hide()" />
            <a4j:commandButton action="#{cc.attrs.action}"
                value="#{cc.attrs.confirmBtn}" execute="@form" render="@form"
                onclick="#{rich:component('popup')}.hide()" />
        </rich:popupPanel>
        <a4j:commandButton action="#{cc.attrs.validateMethod}"
            value="#{cc.attrs.value}" execute="@form" render="@form"
            oncomplete="if(#{empty facesContext.maximumSeverity}){
                #{rich:component('popup')}.show()
            }" />
    </cc:implementation>
    </html>
    
    
    #{cc.attrs.message}

    <!DOCTYPE html>
    <html ... xmlns:my="http://java.sun.com/jsf/composite/my">
        ...
        <h:form>
            <rich:messages />
            <h:panelGrid>
                Please, type something:
                <h:inputText value="#{someBean.someValue}" required="true" />
    
                <!-- simple example with the default labels: -->
                <my:confirmButton action="#{someBean.action}"
                    validateMethod="#{someBean.preAction}" />
    
                <!-- second example calling other method and using custom labels: -->
                <my:confirmButton action="#{someBean.action2}"
                    validateMethod="#{someBean.preAction}" value="action 2"
                    message="Do you REALLY want to proceed?" />
            </h:panelGrid>
        </h:form>
        ...
    </html>