0

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

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

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

    • 不像我们使用window.confirm的时候,点击页面中的按钮后会出现确认框。

  2. 用户确认确认此窗口,将数据插入数据库要执行的操作方法

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

4

1 回答 1

0

是的,一种方法是使用两种操作方法:一种用于验证,另一种用于实际操作。这实际上是我自己为某些项目所做的方式。

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

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

资源/my/confirmButton.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>

您可能想要更改它,根据需要添加属性和样式。

完成后,您可以为您的 JSF 视图声明组件的命名空间,并像这样使用和重用:

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

也可以看看:

复合组件标签信息

于 2012-08-27T02:14:15.200 回答