richfaces (3.3.2) モーダル パネルで予期しない問題が発生しました。ブラウザを開こうとすると、1 つではなく 2 つのパネルが開きます。1 つは中央に、もう 1 つは左上隅にあります。また、色褪せもありません。また、表示、編集、新規の3つのモードがあります。パネルを開くと、ヘッダーに「新規作成...」または「編集...」が表示され、実際には表示されますが、ヘッダーには表示されません。このモーダルパネルを開く前に適切なモードを設定しているため、後者はまったくレンダリングされません。その上、私が作成した他のすべてのページで問題なく動作し、アプリケーションにはそのようなページが数十あります。ここで何が問題なのか理解できません。それを修正する唯一の方法は、非常に奇妙なページから <a4j:keepAlive/> を削除することです。
私のアプリケーションのどこでも問題なく動作するため、コードがここで役立つかどうかはわかりませんが、この場合のみです。したがって、自分のページに配置すると、おそらく問題なく動作します。私の唯一の質問は、これら 2 つの要素 (<rich:modalPanel> と <a4j:keepAlive>) の相互作用に隠れた、またはまれな問題はありますか? それとも、コード内の間違ったコンマ、括弧、または何かを検索するために、さらに 2、3 日を費やす必要がありますか? :)
最も好奇心旺盛な人向け。パネル自体:
<!-- 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>
パネルを開くボタンの 1 つ:
<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;
}