步骤如下:
1.在WebContent的目录pages/tools下建立模版confirmModal.xhtml.具体内容如下(预先已经准备好alignCenter.xhtml文件):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--
确认模式对话框,参数:
id 模式对话框ID
title 对话框标题
mes 提示内容
actionBean[action] 确认后跳转的action
refresh 需要刷新的区域
-->
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:rich="http://richfaces.org/rich"
xmlns:auth="http://java.fonsview.com/iptv/auth"
xmlns:a="http://richfaces.org/a4j"
>
<f:subview id="#{id}_subview">
<rich:modalPanel id="#{id}" height="122" width="342">
<f:facet name="header">
<h:panelGroup>
<h:outputText value="#{title}" />
</h:panelGroup>
<f:facet name="controls">
<h:panelGroup>
<h:graphicImage value="/img/160/icon_three.gif" styleClass="hidelink" id="hidelink"/>
</h:panelGroup>
</f:facet>
</f:facet>
<ui:decorate template="/layout/alignCenter.xhtml">
<br/>
<h:outputText value="#{mes}" template="/layout/alignCenter.xhtml"/>
<br/>
</ui:decorate>
<h:panelGrid columns="1" width="100%">
<ui:decorate template="/layout/alignCenter.xhtml">
<a:form>
<a:commandButton id="confirmOk"
styleClass="button1"
value="#{msg['cmd.ok']}"
action="#{actionBean[action]}"
reRender="#{refresh}"
limitToList="true"
ajaxSingle="true"
/>
<rich:spacer width="15px" />
<a:commandButton id="confirmCancel"
styleClass="button1"
value="#{msg['cmd.cancel']}"
limitToList="true"
ajaxSingle="true"
/>
<rich:componentControl for="#{id}"
attachTo="confirmOk,confirmCancel,hidelink"
operation="hide"
event="onclick"/>
</a:form>
</ui:decorate>
</h:panelGrid>
</rich:modalPanel>
</f:subview>
</ui:composition>
值得注意的是<rich:modalPanel/>不能被form包含。否则<rich:modalPanel/>无法显示。
2.具体界面使用的模版配置如下:
<ui:insert name="modalPanelDef"></ui:insert>
3.具体界面调用模版如下所示:
<ui:define name="confirmmodalPanel">
<ui:include src="/pages/tools/confirmModal.xhtml" >
<ui:param name="id" value="confirmmodalPanel" />
<ui:param name="title" value="#{msg['web.delete']}" />
<ui:param name="mes" value="#{msg['web.delete.confirm']}" />
<ui:param name="actionBean" value="#{productAction}"/>
<ui:param name="action" value="deleteProduct" />
<ui:param name="refresh" value="data" />
</ui:include>
</ui:define>
其中
<ui:param name="actionBean" value="#{productAction}"/>
设置的是后台具体要调用的类。
<ui:param name="action" value="deleteProduct" />
设置的是具体要调用的方法。(我在测试时,总是不能在方法中传递参数。)
4.按钮实际调用如下:
<a:commandButton styleClass="button4"
value="#{msg['global.applicationRemove']}"
disabled="#{(0 == productAction.product.id and 7 != productAction.product.status) or (0 != productAction.product.status and 7 != productAction.product.status)}"
reRender="data"
oncomplete="Richfaces.showModalPanel('confirmmodalPanel');" />