Richfaces模态面板和a4j:keepAlive

时间:2010-04-05 13:26:38

标签: jsf richfaces modal-dialog ajax4jsf keep-alive

我遇到了richfaces(3.3.2)模式面板的意外问题。当我尝试打开它时,浏览器打开两个面板而不是一个:一个位于中心,另一个位于左上角。此外,不会发生褪色。此外,我有三种模式:查看,编辑,新 - 当我打开我的面板时,它应该在标题中显示“新建...”或“编辑...”,实际上它显示但不在标题中显示为后者虽然应该完全没有渲染,因为我在打开这个模态面板之前设置了正确的模式。除了它在我已经制作的所有其他页面上工作正常,我的应用程序中有数十个这样的页面。我无法理解这里有什么问题。解决它的唯一方法是删除< a4j:keepAlive />来自非常奇怪的页面,imho。

我不确定代码是否在这里有用,因为它在我的应用程序中的每个地方都能正常工作,但这只是个案。因此,如果你把它放在你的页面上它可能没有问题。我唯一的问题是:在这两个元素的交互中是否存在任何隐藏或罕见的问题(< 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;
}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

将domElementAttachment =“parent”参数添加到rich:modalPanel,编辑器将正常工作。