Control of modalPanel not rendering
cliffwiggs May 23, 2007 9:31 AMI want to follow 'best practices' so please let me know if there is a better way to implement what i'm trying to do.
Imagine a shopping cart type application with a modalPanel backed by a bean to show detailed info on a product. You can click on any product and it updates the bean and then displays the same modal. Thats the closest analogy to what I'm doing.
In my app, when I 'update' the modal and display it, the control facet doesn't render. This is where I've placed my 'close' link. Thus I am stuck in the modal.
I stripped this down to just this demo code and the 'Change Message' link works correctly the first two times, but the 3rd time I click it, the control facet doesn't render.
Based on another forum thread, should I create an ajax region inside the modalPanel and rerender it instead of rerendering the entire modalPanel?
Here is my code:
demo.jsp
<%@ taglib uri="https://ajax4jsf.dev.java.net/ajax" prefix="a4j" %>
<%@ taglib uri="http://richfaces.ajax4jsf.org/rich" prefix="rich"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<HTML>
<HEAD> <title>Demo Page</title> </HEAD>
<body bgcolor="white">
<f:view>
<h:form>
<f:verbatim>
<a href="javascript:Richfaces.showModalPanel('popupMsg')">Showpopup</a>
</f:verbatim>
<a4j:commandLink reRender="popupMsg" value="Change Message" oncomplete="Richfaces.showModalPanel('popupMsg')">
<a4j:actionparam value="Changed Message" assignTo="#{demo.modalMessage}" />
</a4j:commandLink>
<rich:modalPanel id="popupMsg" resizeable="false" height="200" width="200" zindex="2000">
<f:facet name="header"><h:outputText value="Modal Panel"/></f:facet>
<f:facet name="controls">
<f:verbatim>
<a href="javascript:Richfaces.hideModalPanel('popupMsg')">X</a>
</f:verbatim>
</f:facet>
<h:outputText value="#{demo.modalMessage}"/>
</rich:modalPanel>
</h:form>
</f:view>
</body>
</HTML>
DemoBean.java
package demo.web;
public class DemoBean {
private String modalMessage="Default Message";
public String getModalMessage() {
return modalMessage;
}
public void setModalMessage(String modalMessage) {
this.modalMessage = modalMessage;
}
}