我在 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;
}