0

我在 Richfaces (3.3.2) 模式面板上遇到了意想不到的问题。当我尝试打开它时,浏览器会打开两个面板而不是一个:一个在中心,另一个在左上角。此外,不会发生褪色。我也有三种模式:查看、编辑、新建 - 当我打开我的面板时,它应该在标题中显示“创建新...”或“编辑...”,实际上它显示但不在标题中作为后者虽然应该渲染,但根本没有渲染,因为我在打开此模式面板之前设置了正确的模式。此外,它在我制作的所有其他页面上都可以正常工作,并且我的应用程序中有数十个这样的页面。我不明白这里有什么问题。修复它的唯一方法是从非常奇怪的页面中删除 <a4j:keepAlive/> ,恕我直言。

我不确定代码在这里是否有用,因为它在我的应用程序中的任何地方都可以正常工作,但这是唯一的情况。所以如果你把它放在你的页面上,它可能会毫无问题地工作。我唯一的问题是:这两个元素(<rich:modalPanel> 和 <a4j:keepAlive>)的交互是否存在任何隐藏或罕见的问题?或者我应该再花两三天在我的代码中寻找一些错误的逗号、括号或其他东西吗?:)

对于大多数好奇。面板本身:

<!-- there's no outer form -->
    <rich:modalPanel id="panel" autosized="true" minWidth="300" minHeight="200">
        <f:facet name="header">
            <h:panelGroup id="panelHeader">
            <h:outputText value="#{msg.new_smth}" rendered="#{MbSmth.newMode}"/>
            <h:outputText value="#{msg.edit_smth}" rendered="#{MbSmth.editMode}"/>
            </h:panelGroup>
        </f:facet>
        <h:panelGroup id="panelDiv">
            <h:form >
                <!-- fields and buttons -->
            </h:form>
        </h:panelGroup>
    </rich:modalPanel>

打开面板的按钮之一:

<a4j:commandButton id="addBtn"
            reRender="panelHeader, panelDiv"
            value="#{form.add}"
        oncomplete="#{rich:component('panel')}.show()"
            action="#{MbSmth.add}"
            image="create.gif"/>

单击按钮时调用的操作:

public void add() {
    curMode = NEW_MODE; // initial mode is VIEW_MODE
    newSmth = new Smth();
}

模式检查:

public boolean isNewMode() {
    return curMode == NEW_MODE;
}

public boolean isEditMode() {
    return curMode == EDIT_MODE;
}
4

2 回答 2

0

将 domElementAttachment="parent" 参数添加到rich:modalPanel,编辑器就可以正常工作了。

于 2013-08-26T16:58:05.147 回答
0

请记住,modalPanel 始终存在,但它是隐藏的。我认为keepAlive一直在显示这一点。

于 2010-05-25T13:56:19.480 回答