Rich modalpanel会自动关闭

时间:2010-11-08 16:04:34

标签: jsf richfaces seam

我面临与此处所述相同的问题Rich modalpanel closes automatically

我正在使用richfaces 3.3.0(包含在接缝2.12中)。我试图找出问题所在,Firebug显示在modalpanel出现后,会生成对服务器的请求。面板在几毫秒后关闭。我为rich_modalPanel标签处理了几个位置(在外面的表格内)。

有什么想法吗?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<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:rich="http://richfaces.org/rich"
    xmlns:a="http://richfaces.org/a4j"
    xmlns:s="http://jboss.com/products/seam/taglib">
<head />
<body id="pgHome">
<f:view>
    <div id="document">
        <h:form id="login">
        <fieldset>
            <h:outputLabel id="UsernameLabel" for="username">Login Name</h:outputLabel>
            <h:inputText id="username" value="#{identity.username}" style="width: 175px;" />
        </fieldset>
        <h:commandButton id="search2" value="modal"
            onclick="#{rich:component('mp')}.show()" />

        </h:form> 
        <rich:modalPanel id="mp" height="200" width="500">
            <f:facet name="header">
                <h:outputText value="Modal Panel Title" />
            </f:facet>
        </rich:modalPanel>
    </div>
</f:view>
</body>
</html>

编辑:

我终于使用了这个例子:

<rich:modalPanel id="modalPanelID">
    <f:facet name="header">
        <h:outputText value="header" />
    </f:facet>
    <a onclick="Richfaces.hideModalPanel('modalPanelID');" href="#">Hide</a>
</rich:modalPanel>
<a onclick="Richfaces.showModalPanel('modalPanelID');" href="#">Show</a>

4 个答案:

答案 0 :(得分:8)

这种行为是正常的,因为您使用commandButton使用以下代码显示ModalPanel

<h:commandButton id="search2" value="modal" onclick="#{rich:component('mp')}.show()" />

commandButton将显示ModalPanel然后将提交表单。这将强制页面完全重新显示,这就是你得到这种行为的原因。

要解决您的问题,您必须在return false;事件结束时onclick,这可以转换为显示模态面板,然后停止任何处理,即不要提交形式。要使用的代码如下:

<h:commandButton id="search2" value="modal" onclick="#{rich:component('mp')}.show(); return false;" />

答案 1 :(得分:2)

尝试使用<a4j:commandButton>代替<h:commandButton>

但由于您只有onclick,因此根本不需要commandButton - 使用<input type="button" onclick=".." />

答案 2 :(得分:1)

我的猜测是,因为您正在使用h:commandButton,所以您要发布表单,除非您想要这样做,否则就是问题。

至少让按钮返回false,因此它不会发布,或使用普通的html按钮。

答案 3 :(得分:0)

我有一个熟悉的问题。我使用commandButton上传文件。使用onClick-Event会在不单击加载页面的情况下触发事件。如果我使用动作,我的模态面板会自动隐藏。单击commandButton后,modalPanel应保持打开状态。我需要提交表单来处理bean中的上传数据。

这是我的代码......

<h:commandButton id="Button"
    process="@this,attachmentPanel"
    binding="#{actionButton}"
    value="#{messages['view.attachment.add']}"
    action="#{myHandler.addAttachment()}"
    reRender="attachmentFramePanel">
</h:commandButton>